テーブルに列を追加する

テーブルに列を追加する

次のデータ列を含むいくつかの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変数を印刷します。
  • ( ... ) > newfileprintf:これにより、コマンド全体がサブシェルで実行されるため、最初のコマンドとループの出力をキャプチャしますnewfile

おすすめ記事