2017-02-21 13 views
1

キーフィールドで照合した後、両方のファイルから各行のすべてのフィールドを結合するにはどうすればよいですか?フィールドの数がf2で不明な場合、この1ライナーを一般化する方法は?キーフィールドで照合した後にすべての列を印刷する方法

f2:  
a 1 2  
b 3 4  
c 5 6 

f3:  
10 a x y z  
11 g x y z  
12 j x y z  

observed:  
a 10 x y z 
a1 10 x y z 

Desired:  
a 1 2 10 x y z 

これらは私の最高の試みであるが正しくありません:

AWK「FNR == NR {[$ 1] = $ 2;次}($ 2のA){[$ 2]印刷$ 0} 'f2.txt f3.txt> f4.txt

awk' FNR == NR {a [$ 1] = $ 2 $ 3;次の} {($ 2で){print $ [2]、$ 0} 'f2 .txtのf3.txt>

答えて

0
awk 'NR==FNR{a[$1]=$0;next} ($2 in a){print a[$2],$1,$3,$4,$5}' f2.txt f3.txt > f4.txt 

保存f4.txt全体として値と列1をキーとし、2番目のファイルを読み込んだときには、配列aで列2をチェックしてください。a[$2]と残りの列

短い方法です。このコマンドの欠点は、 10との間のx):

awk 'NR==FNR{a[$1]=$0;next} ($2 in a){second=$2; $2="";print a[second],$0}' f2.txt f3.txt > f4.txt 

は、空の文字列と第二のファイルの$ 2交換し、行全体mxttgen31 @$0

0

を印刷:試してみてください。

awk 'FNR==NR{Q=$2;$2="";A[Q]=$0;next} ($1 in A){print $0,A[$1]}' f3 f2 
上記のコマンドの

説明は次のように:

あなたのファイルがあなたの例のようにキーでソートされている場合
awk 'FNR==NR{  ##### Checking condition FNR==NR here, where FNR and NR both denotes the number of line, 
         only difference between FNR and NR is as we could read mutiple files from awk, 
         value of FNR will be RESET on next file's start, where NR's value will be keep on increasing till 
         it completes reading all the file. so this condition will be TRUE only when first Input_file(which is f3 here) will be TRUE. 
Q=$2;    ##### Assigning second field's value to variable Q. 
$2="";    ##### making second field's value to NULL now. 
A[$2]=$0;   ##### Create an array named A whose index is $2 and value is current line. 
next}    ##### putting next(awk's in-built keyword) which skips all next further statements and take the cursor again to starting. 
($1 in A)   ##### Cursor will come here whenever second Input_file is being read, so here checking $1(first field) is present in array A then do following. 
{print $0,A[$1]} ##### print the current line($0) of current file named f2 and print array A's value whose index is $1 of current file f2. 
' f3 f2   ##### Mentioning Input_files here. 
+1

10 xyz'、OPの希望する出力は 'a 1 2 10 xyz ' – haifzhan

+0

ありがとうTON Haifeng Zhang、私は今編集しました。 – RavinderSingh13

0

は、joinは、このタスクのためのツールである、あなたの出力は `1 2である

join -11 -22 f2.txt f3,txt 
関連する問題