我正在尝试使用ls
和xargs
在路径中打印特定的文件扩展名.bam and .vcf
。以下是关闭但当我|
两个ls
命令时,我得到以下错误。分开它工作正常,除了每个文件打印在换行符上(我的实际数据有数百个文件,使其更容易阅读)。谢谢 :)。
目录中的文件
1.bam
1.vcf
2.bam
2.vcf
带错误的命令
ls /home/cmccabe/Desktop/NGS/test/R_folder/*.bam | xargs -n1 basename | ls /home/cmccabe/Desktop/NGS/test/R_folder/*.vcf | xargs -n1 basename >> /home/cmccabe/Desktop/NGS/test/log
xargs: basename: terminated by signal 13
所需的输出
1.bam 1.vcf
2.bam 2.vcf
答案 0 :(得分:1)
您无法将输出传输到ls
并将其打印到其他输出。您应该将参数提供给第一个参数,它将输出所有内容。
ls * .a * .b * .c | xargs ... q
答案 1 :(得分:0)
ls
目前还没有为您做任何事情,它是列出您所有文件的shell。由于您在ls
的输出处于输出状态,因此您实际上容易受到dangerous file names的攻击。</ p>
basename
可以使用-a
选项获取多个参数:
basename -a "path/to/files/"*.{bam,vcf}
要在两列中打印,您可以printf
通过xargs
使用sort
进行排序。整个-z
或-0
标志会导致空字节用作文件名分隔符:
basename -az "path/to/files/"*.{bam,vcf} | sort -z | xargs -0n 2 printf "%b\t%b\n"
如果您在打印到列后再进行任何处理,则可能需要将%b
格式的printf
替换为%q
s。这将在输出中逃避不可打印的字符,但对人眼来说可能看起来有点难看。