grep为循环中的每个元素元素并使用BASH写入newfile

时间:2013-11-19 21:29:14

标签: bash for-loop grep

我正在使用grep和for循环来尝试在文件(4700921_combined_subs.txt)中搜索数组(ids)的每个元素,然后将每一行写入一个名为搜索项的新文件。在被搜索的文件中,每个搜索词都有多次出现。

有人可以帮我解释我的代码有什么问题吗?它做了我想要的一切,除了结果文件都是空的。任何想法?

    for i in "${ids[@]}"
        do 
        grep '^$i' 4700921_combined_subs.txt > $i.txt
        done

非常感谢提前

2 个答案:

答案 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 }'