0

CSVキー/値を含む基本があります。最初の 2 列がキーで、3 列目が値です。

サンプルファイル 1:

12389472,1,136-7402
23247984,1,136-7402
23247984,2,136-7402
34578897,1,136-7402

別のファイルには、最初のファイルで値を変更する必要があるキーのリストがあります。値をに変更しようとしています136-7425

例ファイル 2:

23247984,1
23247984,2

これが私が現在行っていることです:

/usr/xpg4/bin/awk '{FS=",";OFS=","}NR==FNR{a[$1,$2]="136-7425";next}{$3=a[$1,$2]}1' file2 file1 > output

これは機能していますが、 に見つからないキーの値を空白のままにしていますfile2file2に存在するキーの値のみを変更し、見つからないキーの現在の値を残したいと思います。

誰かが私が間違っていることを指摘できますか? または、これを達成するためのより簡単な方法があるかもしれません。

ありがとう!

4

2 に答える 2

4

最初のファイルに存在しないキーの 3 番目のフィールドをザッピングしているようです。これを試して:

awk '{FS=OFS=","}NR==FNR{a[$1,$2]="136-7425";next} ($1,$2) in a{$3=a[$1,$2]} 1' file2 file1 > output

または(以下のコメントを参照):

awk '{FS=OFS=","}NR==FNR{seen[$1,$2]++;next} seen[$1,$2]{$3="136-7425"} 1' file2 file1 > output

参考までに、名前付きの配列seen[]も同様に、入力から重複を削除するために一般的に使用されます。

awk '!seen[$0]++' file
于 2013-10-10T20:38:17.643 に答える
4

この行はあなたのために働くはずです:

awk -F, -v OFS="," 'NR==FNR{a[$1,$2]=1;next}a[$1,$2]{$3="136-7425"}7' file2 file1
于 2013-10-10T20:58:58.367 に答える