私は一般的にUnixに初めて触れ、シェルスクリプトを学び始めました。次の例の行を含むCSVファイルを使用しています(項目ごとに4つの項目を含む大容量CSVファイル)。
Table 1
Item ID Time Available Location
0001 02/02/2021 08:00 Y NJ
0001 02/02/2021 09:00 N UT
0001 02/02/2021 10:00 Y AZ
0001 02/02/2021 11:00 Y CA
0002 02/02/2021 08:00 Y NJ
0002 02/02/2021 09:00 N UT
0002 02/02/2021 10:00 Y AZ
0002 02/02/2021 11:00 Y CA
次のプロジェクトIDを含む別のCSVがあります。
Table 2
Item ID Item_Name Item_Aux_ID Item_Aux_name
1001 IT_1 3323 IT_Aux_1
1002 IT_2 3325 IT_Aux_2
1003 IT_3 3328 IT_Aux_3
1010 IT_4 3333 IT_Aux_4
最初のCSVファイルに新しいエントリを作成したい(2番目のCSVファイルのエントリごとに1つのエントリ)。各新しい項目はTable1の最初の行と同じでなければならず、項目IDは適切に置き換えられなければなりません。予想される出力は次のとおりです。
Table 1
Item ID Time Available Location
0001 02/02/2021 08:00 Y NJ
0001 02/02/2021 09:00 N UT
0001 02/02/2021 10:00 Y AZ
0001 02/02/2021 11:00 Y CA
0002 02/02/2021 08:00 Y NJ
0002 02/02/2021 09:00 N UT
0002 02/02/2021 10:00 Y AZ
0002 02/02/2021 11:00 Y CA
1001 02/02/2021 08:00 Y NJ
1002 02/02/2021 08:00 Y NJ
1003 02/02/2021 08:00 Y NJ
1010 02/02/2021 08:00 Y NJ
上記の機能を達成するために、Unixでスクリプトをどのように書くことができますか?よろしくお願いします。
ベストアンサー1
ロジックを理解するには、コメントを読んでください。
awk '
NR==2 {SV = $0 # save the relevant info from file1
RG = $1
}
NR != FNR {if (FNR==1) next # in new file: skip header
sub(RG, $1, SV) # insert new "item ID" in saved line
RG = $1 # save new search pattern
sub($0, SV) # replace input line with modified saved line
}
1 # print it
' file[12]
Item ID Time Available Location
0001 02/02/2021 08:00 Y NJ
0001 02/02/2021 09:00 N UT
0001 02/02/2021 10:00 Y AZ
0001 02/02/2021 11:00 Y CA
0002 02/02/2021 08:00 Y NJ
0002 02/02/2021 09:00 N UT
0002 02/02/2021 10:00 Y AZ
0002 02/02/2021 11:00 Y CA
1001 02/02/2021 08:00 Y NJ
1002 02/02/2021 08:00 Y NJ
1003 02/02/2021 08:00 Y NJ
1010 02/02/2021 08:00 Y NJ