インデックスファイルの一致する列をcsvに追加する

インデックスファイルの一致する列をcsvに追加する

次のデータを含むファイルがありますindex.txt

2013/10/13-121 f19f26f09691c2429cb33456cf64f867
2013/10/17-131 583d3936c814c1bf4e663fe1688fe4a3
2013/10/20-106 0f7082e2bb7224aad0bd7a6401532f56
2013/10/10-129 33f7592a4ad22f9f6d63d6a17782d023
......

CSV形式の2番目のファイルには、次のデータが含まれています。

2013/10/13-121, DLDFWSXDR, 15:33, 18:21, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965
2013/10/17-131, DLDFWXDR, 11:05, 15:08, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965
2013/10/20-106, DLSDXDR, 12:08, 13:06, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965
2013/10/10-129, DLXDAE, 15:33, 18:46, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965

これで、ID(最初の列)がインデックスファイルのIDと一致するか、その逆の場合にCSVの末尾にMD5SUMを追加するソリューションが必要です。したがって、ファイルは最後に次のように表示されます。

2013/10/13-121, DLDFWSXDR, 15:33, 18:21, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, f19f26f09691c2429cb33456cf64f867
2013/10/17-131, DLDFWXDR, 11:05, 15:08, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 583d3936c814c1bf4e663fe1688fe4a3
2013/10/20-106, DLSDXDR, 12:08, 13:06, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 0f7082e2bb7224aad0bd7a6401532f56
2013/10/10-129, DLXDAE, 15:33, 18:46, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 33f7592a4ad22f9f6d63d6a17782d023

答え1

コマンドを試してくださいjoin

join  <(sort file1.csv | sed 's/$/,/g') <(sort index.txt | sed 's/ /, /g')

2013/10/10-129, DLXDAE, 15:33, 18:46, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 33f7592a4ad22f9f6d63d6a17782d023
2013/10/13-121, DLDFWSXDR, 15:33, 18:21, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, f19f26f09691c2429cb33456cf64f867
2013/10/17-131, DLDFWXDR, 11:05, 15:08, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 583d3936c814c1bf4e663fe1688fe4a3
2013/10/20-106, DLSDXDR, 12:08, 13:06, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 0f7082e2bb7224aad0bd7a6401532f56
  • sort t1 | sed 's/$/,/g'file1.csv をソートし、コンマで接尾辞を付けます。
  • sort t2 | sed 's/ /, /g'index.txt 並べ替えと区切り記号の置換
  • 次にconnectコマンドを使用します(デフォルトは最初のフィールドです)。

答え2

awkファイルをソートせずに使用:

awk 'NR==FNR{a[$1]=$2;next}{$(NF+1)=a[$1]}1' index.txt FS=', ' OFS=', ' file.csv

最初のブロックステートメントを使用すると、最初のファイルをindex.txt配列にコピーできますa

キー(ファイルの最初のフィールド)が配列の一部である場合、2番目のブロックステートメントは配列の内容をaファイル行の末尾に追加します。file.csv

答え3

また、試してください - 最初のファイルと2番目のファイルのIDが異なる場合 -:

awk 'NR == FNR {S[$1] = $2; next} {print $0 FS " " S[$1]}' file1 FS="," file2

関連情報