我有一个包含编号为
的文件的目录1>chr1:2111-1111_mask.txt
1>chr1:2111-1111_mask2.txt
1>chr1:2111-1111_mask3.txt
2>chr2:345-678_mask.txt
2>chr2:345-678_mask2.txt
2>chr2:345-678_mask3.txt
100>chr19:444-555_mask.txt
100>chr19:444-555_mask2.txt
100>chr19:444-555_mask3.txt
每个文件在第一行包含>chr1:2111-1111
之类的名称,在第二行包含一系列字符。
我需要使用>
之前的数字作为指南对数据库中的文件进行数字排序,使用_mask3
执行每个文件的命令并使用。
我有这段代码
ls ./"$INPUT"_temp/*_mask3.txt | sort -n | for f in ./"$INPUT"_temp/*_mask3.txt
do
read FILE
Do something with each file and list the results in output file including the name of the string
done
它可以工作,但是当我检查输出文件中的字符串列表时,它们就像这样
>chr19:444-555
>chr1:2111-1111
>chr2:345-678
为什么?
答案 0 :(得分:0)
所以......我不确定这里的“工作”是什么,就像你提出的问题一样。
好像你有两个问题。
解决1,你的命令ls ./"$INPUT"_temp/*_mask3.txt | sort -n | for f in ./"$INPUT"_temp/*_mask3.txt
在这里没有多大意义。您将从ls获取文件列表,然后将其传递给sort。这可能会为您提供所需的输出,但随后您将其输出到for
,这没有任何意义。
实际上,您可以将整个脚本重写为
for f in ./"$INPUT"_temp/*_mask3.txt
do
read FILE
Do something with each file and list the results in output file including the name of the string
done
你将拥有完全相同的输出。要对此进行排序,您可以执行以下操作:
for f in `ls ./"$INPUT"_temp/*_mask3.txt | sort -n`
do
read FILE
Do something with each file and list the results in output file including the name of the string
done
对于意外截断,文件名中的>
字符在bash shell中很重要,因为它将前面命令的stdout指向指定的文件。你需要确保当你在循环中使用变量$f
时,你会在那个东西周围加上引号,以防止bash
误解文件名command > file
类型的东西。