1

2 つの最初の列が両方のファイルで一致するときに 2 つのファイルをマージし、最初のファイルの値を 2 番目のファイルの列に置き換える方法...つまり...

同数の列:

FILE 1:
121212,0100,1.1,1.2,
121212,0200,2.1,2.2,

FILE 2:
121212,0100,3.1,3.2,3.3,
121212,0130,4.1,4.2,4.3,
121212,0200,5.1,5.2,5.3,
121212,0230,6.1,6.2,6.3,

OUTPUT:
121212,0100,3.1,3.2,3.3,
121212,0200,5.1,5.2,5.3,

$0つまり、一致する場合$1$2両方のファイルで2番目のファイルを印刷する必要があります。ロジックは理解できますが、配列を使用して実装することはできません。それは明らかに使用する必要があります。

コードを説明するために少し時間を割いてください。

4

2 に答える 2

2

awkパターン ファイルの最初の 2 つのフィールドを出力し、パイプしgrepて一致させるために使用します。

$ awk 'BEGIN{OFS=FS=","}{print $1,$2}' file1 | grep -f - file2
121212,0100,3.1,3.2,3.3,
121212,0200,5.1,5.2,5.3,

この-fオプションはgrep、ファイルからパターンを取得するように指示しますが-、ファイル名の代わりに使用すると、grepからパターンを取得しますstdin

したがって、最初のスクリプトは、パイプを使用してusingで照合するawkパターンを生成します。file1file2grep

$ awk 'BEGIN{OFS=FS=","}{print $1,$2}' file1
121212,0100
121212,0200

おそらく、次を使用して一致を行の先頭に固定する必要があります^

$ awk 'BEGIN{OFS=FS=","}{print "^"$1,$2}' file1 
^121212,0100
^121212,0200

$ awk 'BEGIN{OFS=FS=","}{print "^"$1,$2}' file1 | grep -f - file2
121212,0100,3.1,3.2,3.3,
121212,0200,5.1,5.2,5.3,
于 2012-12-31T16:54:48.797 に答える
1

を使用する 1 つの方法を次に示しawkます。

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

結果:

121212,0100,3.1,3.2,3.3,
121212,0200,5.1,5.2,5.3,
于 2013-01-01T00:14:38.340 に答える