Unixやgawk
。
を使用していますが、grep -f file1 file2
これは、その文字列を含むファイル2の最初の列の行だけでなく、ファイル1の文字列を含むファイル2のすべての行も印刷します。
gawk
他のUNIXツールを使用してこの問題をどのように解決できますか?
答え1
while read vl ; do grep "^$vl " file2 ; done < file1
read
改行文字で終わる入力を見つけて変数に入れますvl
。ループでラップして、while
すべてのものについて繰り返しますSTDIN
。< file1
コンテンツを使用してfile1
STDINにリダイレクトされるため、すべてのアイテムに対してループが繰り返されますfile1
。 (に保存されている)各行にfile1
接頭辞付きのクエリを使用してvl
grepします。これにより、クエリが行の先頭にバインドされます。また、grep検索文字列の末尾にスペースを追加して(file2の列区切り文字がスペースであると仮定して)、foobarと正確に一致し、サブ一致(検索語がfooで行がある場合)のみが一致しないようにしました。最初の列でfile2
^
file2
file2
いいえ一致を得なさい)。file2
スペースが空白でない場合は、スペースをフィールド区切り文字に置き換えます。
file1 を自由に変更できる場合は、次のようにします。
sed -i 's/^\(.*\)$/^\1 /' file1
これで元の画像がgrep -f
機能します(次にスペースを区切り文字として使用したことをもう一度参照してください\1
)。