2017-03-18 2 views
-1

私は2つのファイルを持っています。ファイル1とファイル2の内容は以下の通りです。私はファイル1に対してファイル2の値を見つけたいと思っています。grepを使わずに別のファイルの値を検索するには?

私はクエリの下にあるが、わかりません。

問合せ:

cat file1 | awk -F ',' 'BEGIN{while(getline<"file2"){OFS=",";a[$2]=$1","$2","$3}} {print $0,a[$1]}' >> Final 

はFile1

173 
149 
133 
162 

File2の

140, dog 
145, cat 
149, rat 
133, frog 
160, lion 
162, total 

ご注意:ファイル2のサイズが非常に大きいように、通常のgrepは、多くの時間を要します。

+0

をgrepのパターンマッチングを行いながら、レコードawkは絶対マッチングを作るだけのために。あなたはawkパターンマッチング(〜/パターン/)を使用しない限り、grepキーとawkでは一致しません。 –

+1

@GeorgeVasiliou私はs/absolute/string /とs/pattern/regexp /でなければなりません。非常にあいまいなので、 "パターン"という言葉は決して使用しないでください。そのときの "文字列"または "正規表現"を必ず使用してください。そして明らかにするためには、一般的なawkについてではなく、ユーザ固有の投稿されたスクリプトについて話しています。 Vaibhav - getlineの使用を検討しているなら、まずhttp://awk.freeshell.org/AllAboutGetlineで議論されたすべての注意点を読み、完全に理解してください。 –

+0

@GeorgeVasiliou [OK]を、私はhttp://unix.stackexchange.com/a/352304/133219でその質問へのawkソリューションを掲載しました。 –

答えて

2

お知らせ、送りcatの必要はありません:

$ awk -F, 'NR==FNR{a[$1];next}$1 in a' f1 f12 
149, rat 
133, frog 
162, total 

を説明:

awk -F, ' # set delimiter to , 
NR==FNR{ # process the first file 
    a[$1] # hash the keys to a 
    next # off to the next record 
} 
$1 in a  # for the second file, if key ($1) is found in hash, output record 
' f1 f2  # file order is important 
関連する問題