2017-06-14 82 views
0

我有一個文本文件,其中包含一些由虛線分隔的數據。我需要將每天的數據存儲在與<filename>_yyyymmdd分開的文件中。Bash:讀取文件內容,直到某個模式匹配並存儲在另一個文件中

INPUT_FILE:

01-01-2017 
Some text data 
-------------------------- 
10-10-2017 
Some text data 
-------------------------- 

到目前爲止,我已經試過是:在代碼一些錯誤。

while read line; do 
    if [[ $line =~ ^[0-9]{2}-[0-9]{2}-[0-9]{4}$ ]] ; then; fi 
done > Input_file 

我試圖讀取該文件的日期格式,並創建一個新文件和追加數據格式它。

+1

試'的awk -v RS ='----- ---------------------''{print> FILENAME'_「$ 1}'myfile' –

+0

@PS。 OP希望文件名'yyyymmdd'不在'dd-mm-yyyy' – anubhava

+2

@anubhava感謝您的糾正。 'awk -v RS ='--------------------------''{split($ 1,a,「 - 」); print> FILENAME 「_」a [3] a [2] a [1]}'myfile'應該可以工作。 –

回答

1

如果你正在尋找一個bash的解決方案,然後使用:

#!/bin/bash 

f="${1?needs a filename}" 
while IFS= read -r line; do 
    [[ $line =~ ^([0-9]{2})-([0-9]{2})-([0-9]{4})$ ]] && 
    fn="${f}_${BASH_REMATCH[3]}${BASH_REMATCH[2]}${BASH_REMATCH[1]}" 
    [[ $line =~ ^-+$ ]] || echo "$line" >> "$fn" 
done < "$f" 

否則這個略顯冗長awk也將工作:

awk '/^([0-9]{2})-([0-9]{2})-([0-9]{4})$/{ 
    split($0, a, "-"); if (fn) close(fn); fn = FILENAME "_" a[3] a[2] a[1]} 
    !/^-+$/{print $0 > fn}' filename 
相關問題