次のデータ列を含むいくつかのASCIIファイルがあります。
DATA
1564
1896
1238
1479
1562
1894
1489
....
日付を含む列を実装する必要があります。各データセットは1900-01-01(年-月-日)から始まることがわかります。したがって、各ファイルを次のように再フォーマットしたいと思います。
DATE DATA
1900-01-01 1564
1900-01-02 1896
1900-01-03 1238
1900-01-04 1479
1900-01-05 1562
1900-01-06 1894
1900-01-07 1489
.....
どうすればいいですか?
ベストアンサー1
GNUにアクセスできる場合は、date
次のことができます。
$ ( date="1899-12-31"; printf 'DATE\tDATA\n';
tail -n+2 file |
while read line; do
date="$(date -d "$date + 1 day" +%F)"
printf '%s\t%s\n' "$date" "$line"
done; ) > newfile
説明する
date="1899-12-31"
:変数を$date
開始日から1日を引いた日付に設定します。printf 'DATE\tDATA\n';
:列ヘッダを印刷します。tail -n+2 file |
:ファイルの最初の行(ヘッダー)を除くすべての項目を印刷してループに渡しますwhile
。while read line; do ... ; done
:各入力ラインを処理する$line
。date="$(date -d "$date + 1 day" +%F)"
:値に1日を追加します$date
。printf '%s\t%s\n' "$date" "$line"
:現在の値$date
と$line
変数を印刷します。( ... ) > newfile
printf
:これにより、コマンド全体がサブシェルで実行されるため、最初のコマンドとループの出力をキャプチャしますnewfile
。