grep
それ自体はそうすることができます。フラグ -f
を使用するだけです :
grep -f <patterns> <file>
<patterns>
各行に 1 つのパターンを含むファイルです。と <file>
検索したいファイルです。
grep
を強制することに注意してください 各行の内容が正規表現のように見える場合でも、各行をパターンと見なすには、フラグ -F, --fixed-strings
を使用する必要があります .
grep -F -f <patterns> <file>
あなたが言ったように、あなたのファイルが CSV の場合、次のようにすることができます:
grep -f <(tr ',' '\n' < data.csv) <file>
例として、次の行を含むファイル「a.txt」を考えてみましょう:
alpha
0891234
beta
さて、ファイル「b.txt」には次の行があります:
Alpha
0808080
0891234
bEtA
次のコマンドの出力は次のとおりです:
grep -f "a.txt" "b.txt"
0891234
for
にする必要はまったくありません -ここでループ; grep
自体がこの機能を提供します。
ファイル名を使用するようになりました:
#!/bin/bash
patterns="/home/nimish/contents.txt"
search="/home/nimish/another_file.csv"
grep -f <(tr ',' '\n' < "${patterns}") "${search}"
','
を変更できます ファイルにある区切り記号に。
別の解決策:
awk
を使用 独自のhash
を作成します (例:ahash)、すべて自分で制御します。$0 to $i
を置き換えます 任意のフィールドに一致させることができます。
awk -F"," '
{
if (nowfile==""){ nowfile = FILENAME; }
if(FILENAME == nowfile)
{
hash[$0]=$0;
}
else
{
if($0 ~ hash[$0])
{
print $0
}
}
} ' xx yy