gawk または unix で検索

gawk または unix で検索

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コンテンツを使用してfile1STDINにリダイレクトされるため、すべてのアイテムに対してループが繰り返されますfile1。 (に保存されている)各行にfile1接頭辞付きのクエリを使用してvlgrepします。これにより、クエリが行の先頭にバインドされます。また、grep検索文字列の末尾にスペースを追加して(file2の列区切り文字がスペースであると仮定して)、foobarと正確に一致し、サブ一致(検索語がfooで行がある場合)のみが一致しないようにしました。最初の列でfile2^file2file2いいえ一致を得なさい)。file2スペースが空白でない場合は、スペースをフィールド区切り文字に置き換えます。

file1 を自由に変更できる場合は、次のようにします。

sed -i 's/^\(.*\)$/^\1 /' file1

これで元の画像がgrep -f機能します(次にスペースを区切り文字として使用したことをもう一度参照してください\1)。

おすすめ記事