2017-05-02 18 views
1

誰かが私を助けることができたら大変感謝します。UNIXコマンド(grep、sedまたはawk):入力として出力し、ファイルを検索

grep、sed、またはawk(またはその他のコマンド)を使用してこのタスクを実行したいと思います。 私は2つのファイルを持っています。 file1の行と一致するファイル2の2番目の列は、に抽出した場合

ファイル1

0 
1 
4 

ファイル2

S 0 1832 * 0 * * * 
S 1 1801 * 0 * * * 
H 1 1298 99.2 + 0 0 301M10I997M493I 
S 2 1791 * 0 * * * 
S 3 1720 * 0 * * * 
S 4 1693 * 0 * * * 
S 11 1693 * 0 * * * 

私が何をしたいの出力は、だから、

S 0 1832 * 0 * * * 
S 1 1801 * 0 * * * 
H 1 1298 99.2 + 0 0 301M10I997M493I 
S 4 1693 * 0 * * * 

です出力。これは私がしたいことです。ここ

+0

awkは完璧です。この方向を見てください。あなたのコードを開始/実行するには、ここに似たような質問への回答がたくさんあります。 – NeronLeVelu

+0

私はこれを使用しました cat File1.txt | grep -f - File2.txt しかし、列を指定することはできません。 – user2182606

答えて

2

はAWKで古典的溶液である:

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

出力:

S 0 1832 * 0 * * * 
S 1 1801 * 0 * * * 
H 1 1298 99.2 + 0 0 301M10I997M493I 
S 4 1693 * 0 * * * 

コマンドの最初の部分のみによるもののみであるパターンFNR == NRにFILE1上で実行されますfile1の場合はtrue。 $ 1を配列aのインデックスとして使用します。次のコマンドは、file2の$ 2が配列のインデックスとして存在するかどうかをチェックします。ファイル2の$ 2は希望の一致です。最後のコマンドは、file2の一致する行全体を表示します。

+0

あなたは '{print $ 0}'を削除することができます。デフォルトアクションは – user31264

+0

ありがとうございます!それは私のファイルのために働く。 – user2182606

+1

@ user2182606、問題が解決した場合はその回答を受け入れることができます – RomanPerekhrest

関連する問題