CSVファイルの操作

CSVファイルの操作

2つのcsvファイルがあり、AとBであるとします。誤って仕事が混ざったことに気づきました。この間違いを取り消すために、ファイルAの3番目の列のデータをファイルBとファイルBの4番目の列に書き込むシェルスクリプトを作成したいと思います。 4列目のデータは次のとおりです。ファイルBに書き込まれ、ファイルAの3番目の列のデータが書き込まれます。特定の列からデータを取得するために "cut"コマンドを使用できることはわかっていますが、csvファイルの特定の列の後に区切り文字の発生回数を1行に書き込むにはどのコマンドを使用する必要があるのか​​わかりません。数字。

そのようなスクリプトを書くには?

答え1

与えられた

A.csv:
1,2,V,4

B.csv:
X,Y,Z,3

それから

paste -d, <(cut -d, -f1,2 A.csv) <(cut -d, -f4 B.csv) <(cut -d, -f4 A.csv)
1,2,3,4

答え2

awkあなたの友達です

fileA「say」fileA.bakfileB「say」のコピーfileB.bak

#first changing fileB
awk -v FS="," 'NR==FNR{fileA[i++]=$3;next}{$4=fileA[j++];print}' fileA.bak fileB.bak > fileB 
#fileB should be Okay now.
#now changing fileA
awk -v FS="," 'NR==FNR{fileB[i++]=$4;next}{$3=fileA[j++];print}' fileB.bak fileA.bak > fileA
#fileA should be Okay now.
#verify that you have the desired contents in both fileA & fileB
#Now delete the backup files
rm fileA.bak fileB.bak

ノート
1. 2つのスクリプトを組み合わせることは可能ですawkが、より明確で読みやすくするためにスクリプトを分離するのはなぜですか?
2.この解決策は、質問に同じ数のレコードがあり、質問からそれを知っていると fileA仮定します。fileB

関連情報