【问题标题】:Creating files with the same names as the text lines in a file?创建与文件中的文本行同名的文件?
【发布时间】:2018-10-04 06:58:51
【问题描述】:

我在每一行都有不同文本的文件,例如:

blue  
red  
black
blue and red
red and black

如何为每行文本创建文件并且文件名与文本相同?还要为文件添加扩展名?文件应如下所示:

blue.txt  
red.txt  
black.txt
blue and red.txt
red and black.txt

编辑:我犯了一个错误,因为我还有一些文本行包含多个单词,它们之间有空格。对不起。

【问题讨论】:

标签: bash


【解决方案1】:

逐行读取输入文件:

while read basename ; do
    touch "$basename".txt
done < list_of_names.txt

【讨论】:

  • 你在 bash 中吗?如果将所有内容放在一行中,则需要在done 之前插入一个分号。
  • 是的,我在使用 bash 并且代码不在一行上。我刚刚创建了 .sh 文件并复制了文件中的代码,然后如果我像这样运行脚本 ./script.sh 我得到了错误。
  • 很奇怪,它对我有用。尝试将 #! /bin/bash 作为脚本的第一行添加。
【解决方案2】:

使用sedxargs

sed -e 's/$/.txt/' input.txt | xargs -d '\n' touch

在哪里

  • 对于从 input.txt 文件中读取的每一行,sed 将行尾 ($) 替换为 .txt
  • xargs 根据sed 命令的结果构建参数列表并将其传递给touch 命令;
  • -d '\n' 选项指定换行符 \n 作为输入项的分隔符。

【讨论】:

  • 这可行,但在扩展名和文件名之间添加了奇怪的符号:blue and red.txt
  • @user1800997,你能分享hexdump -C &lt; input.txt 命令的输出吗(最好是只包含这个特定字符串的input.txt 文件)?我怀疑源代码行包含不寻常的尾随字符
  • 我只用一行文字测试了这个并且没有出现标志,只有当超过一行时才会出现。我想这是“输入”键或换行符的标志。
  • @user1800997,我猜你的剪贴板有问题。 choroba 的答案是正确的,应该和我的一样有效,但你仍然遇到语法错误。可以试试手动输入命令吗?
  • @user1800997 至少该解决方案适用于教程点上的 Bash:tpcg.io/vIk5Jr
【解决方案3】:

您可以像这样使用 GNU Parallel

parallel touch {}.txt < filelist

如果你想看看它会做什么,而不实际做任何事情,使用:

parallel --dry-run touch {}.txt < filelist

【讨论】:

    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    相关资源
    最近更新 更多