从文件中读取行,然后使用这些值搜索不同的文件

Fr0*_*ght 3 csv bash grep cat

我有一个文件,其中包含一个名称列表(names.txt),我有一个文件,其中包含数千行标签分隔值(CallLog.tsv).我需要使用该文件中的grep每个名称,然后将其保存为新文件.names.txtCallLog.tsv

现在我正在单独做名字:

grep "John" CallLog.tsv > JohnCallLogs
Run Code Online (Sandbox Code Playgroud)

然后我拿出所有的名字并将cat它们转到另一个文件:

cat "John" "Mike" "Dave > FilteredCallLogs
Run Code Online (Sandbox Code Playgroud)

我想编写一个脚本来提高效率.我感谢任何帮助.

che*_*ner 10

而不是grep多次调用(每个名称一次),使用该-f选项在一次调用中查找所有匹配项:

grep -f names.txt CallLog.tsv > FilteredCallLogs.tsv
Run Code Online (Sandbox Code Playgroud)

如果需要按名称分组的行,可以在适当的字段上对结果进行排序:

# E.g., if the names are in column 2
grep -f names.txt CallLog.tsv | sort -k2,2 > FilteredCallLogs.tsv
Run Code Online (Sandbox Code Playgroud)


Ans*_*ers 7

尝试这样的事情:

#!/bin/bash

while read name; do
  grep "$name" CallLog.tsv
done <names.txt >FilteredCallLogs.tsv
Run Code Online (Sandbox Code Playgroud)

<names.txt馈送names.txt进入循环,其中while read name读取它行由行成循环变量$name.>FilteredCallLogs.tsv将循环的输出重定向到文件中FilteredCallLogs.tsv.