【问题标题】:Cat command giving " No such file or directory"Cat 命令给出“没有这样的文件或目录”
【发布时间】:2017-06-09 18:01:20
【问题描述】:

我正在尝试使用此脚本来创建文件名列表(包括它们的路径)并让每个路径用逗号分隔,因此理想情况下,输出如下所示:file1.txt,file2.txt,file3.txt ...ETC。我该怎么办?

#!/bin/bash
LEFT=/home/ndevon/USER/SRA/PE/*_1.fastq.gz
for f in $LEFT; do
     cat "${f}," >> /home/ndevon/USER/left_list.txt 
done

【问题讨论】:

  • 为什么${f}后面有个逗号?
  • 我猜你的意思是echo,而不是cat
  • @mustaccio 或者更好,printf,因为 echo 附加一个换行符。
  • 可能是因为/home/ndevon/USER/SRA/PE/*_1.fastq.gz/home/ndevon/USER/left_list.txt 不存在。我认为这是因为后者不存在。在调用 cat 之前尝试运行 touch /home/ndevon/USER/left_list.txt
  • @mustaccio 成功了,谢谢,我仍然是初学者,我很感激

标签: linux bash unix


【解决方案1】:

你想要的大概是

echo /home/ndevon/USER/SRA/PE/*_1.fastq.gz | tr ' ' ,

将空格转换为逗号。只要您的文件名不包含空格,此方法就有效。

【讨论】:

  • 即使文件名中有空格也可以使用:ls -1 /home/ndevon/USER/SRA/PE/*_1.fastq.gz | tr '\n' ','
【解决方案2】:

试试这个:

# read the filenames into an array
files=( /home/ndevon/USER/SRA/PE/*_1.fastq.gz )

# print the filenames comma-separated
IFS=,
echo "${files[*]}" > output_file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    相关资源
    最近更新 更多