我不知道为什么这不起作用:
for g in *.txt; do for f in $(cat $g); do grep $f annotations.csv; done > ../$f_annot; done
我想循环遍历文件夹中的每个文件,对于我想循环遍历每一行的每个文件并应用grep命令。当我做的时候
for f in $(cat file1.txt); do grep $f annotations.csv; done > ../$f_annot
它有效,它是嵌套循环,不输出任何东西,似乎它正在运行,但它永远持续,什么都不做。
答案 0 :(得分:1)
当你有一个空的txt文件时,grep $f annotations.csv
将被翻译成从stdin读取的grep命令。
您可能想要使用类似
的内容for g in *.txt; do
grep -f $g annotations.csv > ../$g_annot
done
答案 1 :(得分:1)
解决:
for file in *list.txt; do
while read -r line; do
grep "$line" annotations.csv
done < "$file"
> ${file}_annot.txt
done
:)
答案 2 :(得分:0)
我得到了
无法写入目录。
ksh:../:0403-005无法创建指定的文件。
但这是因为$f_annot
评估我们的期望。使用${f}_annot
:
for g in *.txt; do for f in $(cat $g); do grep $f annotations.csv; done > ../${f}_annot ; done
但是你的脚本中存在一个问题,因为它会删除一些循环的结果:$f
总是有循环的最后一个值。也许这更适合您的需求:
for g in *.txt; do for f in $(cat $g); do grep $f annotations.csv; done ; done