【问题标题】:How to add a string at the end of each line accordingly to the name of the file for a list of files?如何根据文件名在每行末尾添加一个字符串以获取文件列表?
【发布时间】:2016-05-16 23:58:29
【问题描述】:

我想在每一行附加文件名。 我想这可以在 awk 或 sed 中完成。我尝试过这样的事情,但没有奏效。

for file in *.cds; do  sed -i '/^>/ s/$/[file]/' $file ; done

我在哪里放置 [file] 我想要括号中的文件名,例如 [name1]。 感谢您的帮助。

【问题讨论】:

  • 您说的是“每一行”,但您过滤了以 > 开头的行 - 是什么?

标签: bash awk sed


【解决方案1】:

应该这样做

for file in *.cds; do sed -i 's/$/['"$file"']/' "$file"; done

在每行末尾的方括号中附加文件名。

更新:我不知道人们为什么要在文件名中使用空格,但如下所述,您应该引用 bash 变量以将其保留为两个实例的逻辑单元。

如果您想限制仅追加以 > 开头的行,请将其添加为模式

for file in *.cds; do sed -i '/^>/s/$/['"$file"']/' "$file"; done

【讨论】:

  • 用空格分隔文件名 - $file 应该被引用两次。
  • '$file' 应该是'"$file"'
  • wrt I don't know why people want to use white spaces in file names - 没有理智的人会这样做,但不幸的是有 Windows... :-)。检查你自己的电脑,我敢打赌它到处都是包含空格的文件名(以及内容行以\r\n! 结尾的文件)。
【解决方案2】:

使用 GNU awk 进行就地编辑:

awk -i inplace '{print $0 "[" FILENAME "]"}' *.cds

【讨论】:

    猜你喜欢
    • 2017-04-10
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2016-07-01
    • 1970-01-01
    • 2023-02-07
    相关资源
    最近更新 更多