grep
sendiri mampu melakukannya. Cukup gunakan bendera -f
:
grep -f <patterns> <file>
<patterns>
adalah file yang berisi satu pola di setiap baris; dan <file>
adalah file tempat Anda ingin mencari sesuatu.
Perhatikan bahwa, untuk memaksa grep
untuk menganggap setiap baris sebagai pola, meskipun konten setiap baris terlihat seperti ekspresi reguler, Anda harus menggunakan flag -F, --fixed-strings
.
grep -F -f <patterns> <file>
Jika file Anda adalah CSV, seperti yang Anda katakan, Anda dapat melakukan:
grep -f <(tr ',' '\n' < data.csv) <file>
Sebagai contoh, pertimbangkan file "a.txt", dengan baris berikut:
alpha
0891234
beta
Sekarang, file "b.txt", dengan baris:
Alpha
0808080
0891234
bEtA
Output dari perintah berikut adalah:
grep -f "a.txt" "b.txt"
0891234
Anda tidak perlu sama sekali untuk for
-loop di sini; grep
sendiri menawarkan fitur ini.
Sekarang gunakan nama file Anda:
#!/bin/bash
patterns="/home/nimish/contents.txt"
search="/home/nimish/another_file.csv"
grep -f <(tr ',' '\n' < "${patterns}") "${search}"
Anda dapat mengubah ','
ke pemisah yang Anda miliki di file Anda.
Solusi lain:
- gunakan
awk
dan buathash
Anda sendiri (misalnya ahash), semua dikendalikan oleh Anda sendiri. - ganti
$0 to $i
dan Anda dapat mencocokkan bidang apa pun yang Anda inginkan.
awk -F"," '
{
if (nowfile==""){ nowfile = FILENAME; }
if(FILENAME == nowfile)
{
hash[$0]=$0;
}
else
{
if($0 ~ hash[$0])
{
print $0
}
}
} ' xx yy