次の繰り返しパターンを持つファイルがあります:
date
line 1
line 2
...
line x
例:
10/30/2016 12:10:00
xxx 123
yyy 456
zzz 789
10/30/2016 12:20:00
xxx 234
yyy 567
zzz 890
各行に対応する日付をタイムスタンプするにはどうすればよいでしょうか。
10/30/2016 12:10:00
10/30/2016 12:10:00 xxx 123
10/30/2016 12:10:00 yyy 456
10/30/2016 12:10:00 zzz 789
10/30/2016 12:20:00
10/30/2016 12:20:00 xxx 234
10/30/2016 12:20:00 yyy 567
10/30/2016 12:20:00 zzz 890
AWK なら可能だと思いますが、あまり経験がありません。よろしくお願いします!
答え1
1 つの可能性としては、次のようにすることです。
awk '/^[[:digit:]/]+[[:space:]]+[[:digit:]:]+/ {d=$1 " " $2; print; next; } /[^[:space:]]/ { print d " " $0 }'
これは、任意の数字のシーケンスに一致し、/
その後にスペースがいくつか続き、その後に数字のシーケンスと:
s が続くもので、日付と一致するはずです。見つかった場合は、最初の 2 つのフィールドを変数 に保存し、d
この行を印刷して次に進みます。次に、少なくとも 1 つのスペース以外の文字を含む行が見つかるたびに (例では空白行を削除しているように見えるため)、d
現在の行の現在の値を印刷します。