2017-12-10 23 views
0

私はスペースの値を持つ2つのテキストファイルを持っています。私は両方のファイルのキー列に基づいてファイルを結合し、別のファイルに出力したいと思います。データのmilllionを持っていますが、私はここで簡単ないくつかのエントリを与える
location.txtawkコマンドの条件に基づいて2つのファイルを結合するにはどうすればよいですか?

1 21.5 23 
2 24.5 20 
3 19.5 19 
4 22.5 15 
5 24.5 12 
6 19.5 12 

data.txtを

2004-03-31 03:38:15.757551 2 1 122.153 -3.91901 11.04 2.03397 
2004-02-28 00:59:16.02785 3 2 19.9884 37.0933 45.08 2.69964 
2004-02-28 01:03:16.33393 11 3 19.3024 38.4629 45.08 2.68742 
2004-02-28 01:06:16.013453 17 4 19.1652 38.8039 45.08 2.68742 
2004-02-28 01:06:46.778088 18 5 19.175 38.8379 45.08 2.69964 
2004-02-28 01:08:45.992524 22 6 19.1456 38.9401 45.08 2.68742 

何私がしようとすると、これら二つを組み合わせることですキー値のカラム1に基づいて、location.txtおよびのカラム4からdata.txtから結果をf location.txtからdata.txtをとコラム2及び3からすべてのデータを組み合わせることにより、以下のような書式(O)...

2004-03-31 03:38:15.757551 2 1 122.153 -3.91901 11.04 2.03397 21.5 23 
2004-02-28 00:59:16.02785 3 2 19.9884 37.0933 45.08 2.69964 24.5 20 
2004-02-28 01:03:16.33393 11 3 19.3024 38.4629 45.08 2.68742 19.5 19 
2004-02-28 01:06:16.013453 17 4 19.1652 38.8039 45.08 2.68742 22.5 15 
2004-02-28 01:06:46.778088 18 5 19.175 38.8379 45.08 2.69964 24.5 12 
2004-02-28 01:08:45.992524 22 6 19.1456 38.9401 45.08 2.68742 19.5 12 

私はawkコマンド使用しています:

awk -F' ' "NR==FNR{label[$1]=$1;x[$1]=$2;y[$1]=$3;next}; ($2==label[$2]){print $0 "," x[$2] y[$3]}" location.txt data.txt > result.txt 

をしかし、私は期待どおりの出力を得ていない、誰も私はこれを修正するのに役立つ? スペースをカンマに置き換えて、結果ファイルをCSV形式で取得できますか?

+0

提案:1)サンプルデータを短くして5行とし、列を5行だけに縮小する。2)期待される出力を必要に応じて正確に表示する。最後に書き留めたものを見逃しやすい。出力が到着しました。あなたのコードから推測するのは簡単ではありません – Sundeep

+0

私はawkに精通していませんが、私はawkコマンドを書いた多くの例を参照しています。私がしようとしているのは、それぞれlocation.txtとdata.txtファイルの第1列と第4列をコンパイルして、data.txtファイルにlocation.txtデータを追加し、その出力を新しいファイルに格納することです。 – Snkini

答えて

1

$ awk ' 
NR==FNR {     # process location.txt 
    a[$1]=$2 OFS $3  # hash using $1 as key 
    next     # next record 
} 
$4 in a {     # process data.txt 
    print $0,a[$4]   # output record and related location 
}' location.txt data.txt # mind the file order 
2004-03-31 03:38:15.757551 2 1 122.153 -3.91901 11.04 2.03397 21.5 23 
2004-02-28 00:59:16.02785 3 2 19.9884 37.0933 45.08 2.69964 24.5 20 
2004-02-28 01:03:16.33393 11 3 19.3024 38.4629 45.08 2.68742 19.5 19 
2004-02-28 01:06:16.013453 17 4 19.1652 38.8039 45.08 2.68742 22.5 15 
2004-02-28 01:06:46.778088 18 5 19.175 38.8379 45.08 2.69964 24.5 12 
2004-02-28 01:08:45.992524 22 6 19.1456 38.9401 45.08 2.68742 19.5 12 
+0

@ JamesBrownさん、ありがとう、私は期待どおりの出力を得ました。 – Snkini

1
のbashで

と参加

join -1 1 -2 4 <(sort -k1,1 -n location.txt) <(sort -k4,4 -n data.txt) -o 2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,1.2,1.3 

出力:

 
2004-03-31 03:38:15.757551 2 1 122.153 -3.91901 11.04 2.03397 21.5 23 
2004-02-28 00:59:16.02785 3 2 19.9884 37.0933 45.08 2.69964 24.5 20 
2004-02-28 01:03:16.33393 11 3 19.3024 38.4629 45.08 2.68742 19.5 19 
2004-02-28 01:06:16.013453 17 4 19.1652 38.8039 45.08 2.68742 22.5 15 
2004-02-28 01:06:46.778088 18 5 19.175 38.8379 45.08 2.69964 24.5 12 
2004-02-28 01:08:45.992524 22 6 19.1456 38.9401 45.08 2.68742 19.5 12 

参照:AWKでman join

関連する問題