2つのファイル間の異なる列値を比較し、一致する場合は異なる列値を印刷します。

2つのファイル間の異なる列値を比較し、一致する場合は異なる列値を印刷します。

File1 には次のデータがあり、これはフィールド区切り文字です。

1,T_EXIT,9053.0,10325.0,, ,  
2,V_TURN,120.0,11334.0,,GOAL,RECK
3,Q_ENTRY,122.0,190.0,, ,
4,Q_ENTRY_RUN,130.0,569.0,, ,

ファイル2にデータがある

SYNC CLK
T_EXIT OPEN 
Q_ENTRY CLOSE ALLOW
CORE_T MODE

file2のColumn1をFile1のColumn2と比較し、EXCAT MATCHが存在する場合は、file2の6列にあるfile2から2列をコピーし、1の7列にあるfile2から3列をコピーしたいと思います。

私は出力が次のようになります:

1,T_EXIT,9053.0,10325.0,,OPEN,
2,V_TURN,120.0,11334.0,,GOAL,RECK 
3,Q_ENTRY,122.0,190.0,,CLOSE,ALLOW
4,Q_ENTRY_RUN,130.0,569.0,, ,

以下のコードを試しましたが、file2で2つの列値「column1」と「column2」を一緒に保存する方法はわかりません。

awk 'NR==FNR{A[$1]=$2;B[$1]=$3;next} ($1 in A) {$6=A[$1]; $7=B[$1]}1' file2 FS=, OFS=, file1 > test

ベストアンサー1

$ awk 'NR==FNR{ data[$1]=$2 OFS $3; next }
  ($2 in data){ sub(/[^,]*,[^,]*$/, ""); $0=$0 data[$2] }1' OFS=, file2 FS=, file1

1,T_EXIT,9053.0,10325.0,,OPEN,
2,V_TURN,120.0,11334.0,,GOAL,RECK
3,Q_ENTRY,122.0,190.0,,CLOSE,ALLOW
4,Q_ENTRY_RUN,130.0,569.0,, ,

使用するとsub(/[^,]*,[^,]*$/, "")、私たちが見るときデータ以前に接続された配列を削除し、file2の対応するキー値を$0= $0 data[$2]

おすすめ記事