1

誰かが2つのファイルを比較するのを手伝ってくれませんか?私は以下のコマンドを使用しましたが、成功しませんでした、

awk -F、'NR == FNR {a [$ 1、$ 2]; 次の}(($ 1、$ 2)in a)'temp1.dat temp2.​​dat

これが私の必要性です。以下の2つのdatファイルの最初の2つのフィールドを比較し、file3で期待どおりに結果をマージする必要があります(最初のフィールド、2番目のフィールド、temp1.datの3フィールド、temp2.​​datの3フィールド)

File1:temp1.dat

A, AB,100
B,BB,200
C,CC,300

File2:temp2.​​dat

A,AB,10
C,CC,30
D,DF, 4

File3:output

A, AB,100,10
C,CC,300,30
4

2 に答える 2

3

awk -F, 'BEGIN{OFS=","}FNR==NR{a[$1$2]=$3;next}($1$2 in a && $3=$3","a[$1$2])' file2 file1

以下でテスト:

> cat file1
A,AB,100
B,BB,200
C,CC,300
> cat file2
A,AB,10
C,CC,30
D,DF,4
> awk -F, 'BEGIN{OFS=","}FNR==NR{a[$1$2]=$3;next}($1$2 in a && $3=$3","a[$1$2])' file2 file1
A,AB,100,10
C,CC,300,30
> 
  • FNR==NR{a[$1$2]=$3;next}最初のファイルfile2に適用されます
  • FNR==NRコードブロックを実行するまでと表示されます。
  • FNR=現在のファイルの行番号
  • NR= 2 つのファイルの合計行の行番号。
  • したがって、上記のステートメントの後に、インデックス as$1$2と値 as を持つ連想配列$3
  • これは.where($1$2 in a && $3=$3","a[$1$2]) に対して実行されFNR!=NR、インデックス $1$2 が配列内のインデックスとして存在するかどうかがチェックされます。次に、2 番目の条件で file1 の 3 番目のフィールドが変更されて$3=$3","a[$1$2]いるため、3 番目のフィールドを変更し$0た common( $1$2) 行が含まれています。

4 つのファイルに対しても同様のロジックを記述する必要があります。

于 2012-08-29T09:49:24.273 に答える
1

試す:

awk -F, '{i=$1 SUBSEP $2} NR==FNR{A[i]=$3; next} i in A{print $0,A[i]}' file2 file1
于 2013-03-04T15:40:39.653 に答える