【发布时间】:2016-06-27 20:33:55
【问题描述】:
我在同一个目录下有如下五个文件(名称以.bed and startchromosomeand have numbers such as1-5`结尾嵌入在中间;显示一行内容或每个文件):
染色体1-5.床
chromosome1 1 21
染色体1-2.床
chromosome1 7 30
chromosome1-9.bed
chromosome1 9 75
染色体2-1.床
chromosome2 8 50
chromosome2-5.bed
chromosome2 6 23
并且我尝试将以相同编号开头的文件归类到一个文件中(因此所有在1-5 等中以1 开头的文件)。
预期输出:
chromosome1.bed
chromosome1 1 21
chromosome1 7 30
chromosome1 9 75
chromosome2.bed
chromosome2 8 50
chromosome2 6 23
此时我尝试将目录中的任何文件与另一个文件名进行比较。
for i in /dir/*; do
for j in /dir/*; do
filename=$(basename "$i")
filename2=$(basename "$j")
if "$filename" != "$filename2";
then cat "$i" "$j" > newfile
fi
done
done
【问题讨论】:
-
关于代码,您尝试将
$filename的内容作为带有参数=和"$filename2"的命令执行。您想测试字符串,它使用[测试命令:if [ "$filename" != "$filename2" ]; then …; fi。请注意,命令名称 ([) 和最后一个参数 (]) 周围的空格是必需的。 -
您怎么知道输出应该在
chromosome1-2.bed之前列出chomosome1-5.bed,或者排序无关紧要?有多少个不同的领先数字?你显示1和2;数字是个位数,还是可以是多位数?有前导零吗?与尾随数字类似——它们是单个数字,还是可以更长,并且使用前导零?文件名中除了.、-、_之外是否还有空格或其他非字母数字字符?目录中是否还有其他文件可以匹配chromosome*-*.bed? -
文件名例如是染色体1-5.bed、染色体1-2.bed和染色体1-9.bed。我试着把它和染色体1.bed这个名字合二为一。我尝试了您的建议,但我收到消息 [*: command not found。我尝试在上面的代码中检查这两个文件是否不相同。
-
你没有注意我显示的间距。
-
测序并不重要,只是染色体后的第一个数字需要相同,这也可以是 chomosome31-5.bed 或 chomosome31-25.bed