web-dev-qa-db-ja.com

2つのファイルを結合して、そのうちの1つの要素の順序を維持します

2つのファイルがあります

File1

_03873
03872
03871
03870
......
_

File2

_00001    0.867
00002    0.855
00003    0.864
00004    0.855
...
03870    0.825
03871    0.852
03872    0.326
03873    0.852
_

_File 2_が持つ要素の順序を維持しながら、_File 1_の_File 1_のII列に値を追加します。

File3

_03873    0.852
03872    0.326
03871    0.852
03870    0.825
......
_

joinでこれを行うことはできますが、_File 1_をソートしたくありません。 awkを使用すると思った

_awk -F "\t" 'FNR==NR{a[$1]=$0; next}$1 in a {print a[$1]"\t"$2}' File1  File2 
_

しかし、この場合もデータをソートします。それを行う方法はありますか?

2
efrem

awkはソートされていません。出力は、file2にある順序で出力され、thatがソートされます。 file1で見つかった順序を維持するには、単に逆にします(不要なa[$1]"\t"$2も削除しました。$0aに保存していました):

$ awk -F "\t" 'FNR==NR{a[$1]=$0; next}$1 in a {print a[$1]}' file2 file1 
03873   0.852   
03872   0.326   
03871   0.852   
03870   0.825   
4
terdon