2016-08-12 12 views
1

2つのデータファイルのマージについて質問があります。最初のファイルには、各サーバーの名前のIPアドレスが含まれています。 2番目のフィールドには、データ項目と関連するIPアドレスが含まれます。Linuxコマンドを使用したファイルのマージと比較

出力するには、2番目のファイルの入力が必要ですが、マップされたサーバー名を最初のファイルで検索します。

File_1:

10.1.1.1 server_1 
10.1.1.2 server_2 
10.1.1.3 server_3 

File_2:

2 10.1.1.3 
4 10.1.1.1 

私は以下の出力を取得するためのコマンドを把握する必要があります。

OUTPUT_FILE:

2 10.1.1.3 server_3 
4 10.1.1.1 server_1 
+0

最大のファイルサイズはどのくらいですか? –

+1

あなたは何を考えましたか? 'join'コマンド(と' sort'コマンド、おそらく[プロセス置換](https://www.gnu.org/software/bash/manual/bash.html#Process-Substitution))は役に立ちますか?あるいは 'awk'を使うこともできます。またはあなたはPerlやPythonを使うことができますか... –

+0

私は書式設定で何かが失われたと思います。あなたがやろうとしていることは、基本的なコマンドラインユーティリティでは難しくはありません、私はあなたがほしいものを本当に伝えることができません。 – willpnw

答えて

1

することができますawkを使用してください:

awk 'FNR==NR{a[$1]=$2; next} $2 in a{print $0, a[$2]}' file1 file2 

2 10.1.1.3 server_3 
4 10.1.1.1 server_1 
1
join -1 1 -2 2 -o 2.1,0,1.2 <(sort -k1 File_1) <(sort -k2 File_2) 

出力:

4 10.1.1.1 server_1 
2 10.1.1.3 server_3 

ファイル2の最初のフィールド、接合フィールド、及び第二のファイル1の最初のフィールド、ファイル2の第2のフィールド、出力に参加ファイル1のフィールド。入力ファイルとしてsort -k1 File_1の出力とsort -k2 File_2の出力を取ります。

出力を最初の列の数値でソートする必要がある場合は、パイプをsort -k1n(またはsort -n)にします。

+0

あなたのサポートのためのJonathanのご指摘の指示が非常に役に立ちました – user3595099

関連する問題