3

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

现在我正在单独命名:

grep "John" CallLog.tsv > JohnCallLogs

然后我把所有的名字都cat写到另一个文件中:

cat "John" "Mike" "Dave > FilteredCallLogs

我想写一个脚本来提高效率。我很感激任何帮助。

4

2 回答 2

10

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

grep -f names.txt CallLog.tsv > FilteredCallLogs.tsv

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

# E.g., if the names are in column 2
grep -f names.txt CallLog.tsv | sort -k2,2 > FilteredCallLogs.tsv
于 2013-07-30T19:20:23.280 回答
7

尝试这样的事情:

#!/bin/bash

while read name; do
  grep "$name" CallLog.tsv
done <names.txt >FilteredCallLogs.tsv

<names.txtnames.txt入循环,while read name逐行将其读取到循环变量$name中。>FilteredCallLogs.tsv将循环的输出重定向到文件FilteredCallLogs.tsv中。

于 2013-07-30T19:00:22.713 回答