Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grep循环中数组的每个元素,并使用BASH写入newfile_Bash_For Loop_Grep - Fatal编程技术网

Grep循环中数组的每个元素,并使用BASH写入newfile

Grep循环中数组的每个元素,并使用BASH写入newfile,bash,for-loop,grep,Bash,For Loop,Grep,我正在使用grep和for循环来尝试搜索文件4700921_combined_subs.txt中数组id的每个元素,然后将每一行写入一个名为搜索项的新文件。在正在搜索的文件中,每个搜索项都有多次出现 有人能帮我破译我的密码出了什么问题吗?它做我想要的一切,除了结果文件都是空的。有什么想法吗 for i in "${ids[@]}" do grep '^$i' 4700921_combined_subs.txt > $i.txt do

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

有人能帮我破译我的密码出了什么问题吗?它做我想要的一切,除了结果文件都是空的。有什么想法吗

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

非常感谢提前使用双引号,否则shell不会展开变量:

grep "$i" 4700921_combined_subs.txt > "$i.txt"

使用双引号,否则shell不会展开变量:

grep "$i" 4700921_combined_subs.txt > "$i.txt"

使用awk可以更有效地完成此任务。根据您获取$ID的方式,您可能可以简化此过程。只需要两个电话,一个给grep,一个给awk。如果我能想到的话,也许有办法避免打电话给grep

grep -f <( printf '%s\n' "${ids[@]}" ) 4700921_combined_subs.txt |
   awk '{f=$1.txt; print >> f }' 

使用awk可以更有效地完成此任务。根据您获取$ID的方式,您可能可以简化此过程。只需要两个电话,一个给grep,一个给awk。如果我能想到的话,也许有办法避免打电话给grep

grep -f <( printf '%s\n' "${ids[@]}" ) 4700921_combined_subs.txt |
   awk '{f=$1.txt; print >> f }' 

好极了,创造了奇迹。非常感谢-事情总是很简单。不客气。如果它为你服务,请考虑将它标记为接受,因此未来面对类似问题的用户将能够轻松地看到它。非常感谢-事情总是很简单。不客气。如果它为您服务,请考虑将其标记为已接受,因此将来面对类似问题的用户将能够轻松地看到它。