ファイルベースの2つの列を比較し、フィールドを追加します。

ファイルベースの2つの列を比較し、フィールドを追加します。

列別の日付と時刻に「YYYY MM DD HHMM」形式の変数(温度)を含むファイルがあり、それをYYYY DDD形式に変換し、時間と温度を変更せずに保持しようとしています。次のように見えますが、ファイルに同じ日付が複数回表示されます。

1980 01 01 0100 3.3
1982 04 11 0400 2.2
1985 12 04 0700 1.7
1995 12 31 1000 2.2

1年のDDD(最後の列)の累積日数を取得するために、最初のファイルに追加したい各日付の日数を含むインデックスファイル(1980-2017)を作成しました。最初の年は次のとおりでした(1980年はうるう年でした)。

1980 01 31  000
1980 02 29  031
1980 03 31  060
1980 04 30  090
1980 05 31  121
1980 06 30  152
1980 07 31  182
1980 08 31  213
1980 09 30  244
1980 10 31  274
1980 11 30  305
1980 12 31  335

最初の2つの列に基づいて2つのファイルを比較しようとしましたが、一致すると、file2の4番目の列をfile1の3番目の列に追加し、結果は次のようになります。

1980 001 0100 3.3 
1982 101 0400 2.2 
1985 346 0700 1.7 
1995 365 1000 2.2

ファイルの2つの列を比較し、以下のawkを使用して2つの列を追加しました。

awk -F' ' 'NR==FNR{c[$1$2]++;next};c[$1$2] > 0' junktemp matrix_sample | awk '{print $1, $3+$4}' 

しかし、これは$ 4と$ 5(時間と温度)を失います。 2つのawk関数を結合して結果としてfile1の$ 4と$ 5を得る方法はありますか?どんな助けでも大変感謝します。

ベストアンサー1

1年間の潜在的な一致のみを提供するため、テストするのは難しいですが、

awk 'NR==FNR{c[$1$2]=$4; next} ($1$2 in c) {$3 = sprintf("%03d", $3 + c[$1$2])} {print $1, $3, $4, $5}' file2 file1
1980 001 0100 3.3
1982 11 0400 2.2
1985 04 0700 1.7
1995 31 1000 2.2

おすすめ記事