我正在使用grep和for循环来尝试在文件(4700921_combined_subs.txt)中搜索数组(ids)的每个元素,然后将每一行写入一个名为搜索项的新文件。在被搜索的文件中,每个搜索词都有多次出现。
有人可以帮我解释我的代码有什么问题吗?它做了我想要的一切,除了结果文件都是空的。任何想法?
for i in "${ids[@]}"
do
grep '^$i' 4700921_combined_subs.txt > $i.txt
done
非常感谢提前
答案 0 :(得分:3)
使用双引号,否则shell不会扩展变量:
grep "$i" 4700921_combined_subs.txt > "$i.txt"
答案 1 :(得分:1)
您可以使用awk
更有效地完成此操作。根据您获得$ids
的方式,您可以简化此操作。只需要两个电话,一个到grep
,一个到awk
。如果我能想到的话,可能有办法避免调用grep
。
grep -f <( printf '%s\n' "${ids[@]}" ) 4700921_combined_subs.txt |
awk '{f=$1.txt; print >> f }'