【问题标题】:Shell script calling rows from text documentShell 脚本从文本文档中调用行
【发布时间】:2015-01-09 08:40:00
【问题描述】:

我需要一些文件重命名方面的帮助。 一开始我准备文本文件:names.txt 该文件包含:

T22.tsv
T33.tsv
T101.tsv
T48.tsv

文件夹/home/filip/Desktop/中的文件名

Xpress33.tsv
Xpress5.tsv
Xpress12.tsv
Xpress006.tsv

/home/filip/Desktop/ 中 mv 之后的文件名:

T22.tsv
T33.tsv
T101.tsv
T48.tsv

你能帮忙吗,我怎么能从 bash 脚本中的文本文件中读取,它可以用 awk。 我试过了:

A= awk 'NR==1 {print $0}' names.txt 
mv Xpress33.tsv   "$A"

但它不起作用。

【问题讨论】:

    标签: bash shell awk rename mv


    【解决方案1】:

    您希望将命令的输出存储到变量中。为此,您需要语法var=$(command)

    因此,这应该是:

    A=$(awk 'NR==1 {print $0}' names.txt)
    mv Xpress33.tsv "$A"
    

    还要注意这些是等价的,因为{print $0}awk 的默认行为:

    awk 'NR==1 {print $0}' names.txt
    awk 'NR==1' names.txt
    

    如果你想让它更直接,你可以这样做:

    mv Xpress33.tsv "$(awk 'NR==1' names.txt)"
    

    【讨论】:

    • 我强烈怀疑这是我们帮助 OP 对他的真正问题实施糟糕解决方案的情况之一,因为这零意义。如果他真的只是想使用文件的第一行作为移动的目标文件名,他可以执行mv source "$(head -1 file)" 甚至是简单的read。我敢打赌,这是在一个泥泞的脚本中间的一个黑客。
    • @FilipZembol 一切都好吗?我不知道你为什么不接受这个答案。
    • 对不起,这是错误的,我只考虑循环,当我阅读你的答案时,我不小心点击了标志。
    • 没问题!另外,请考虑检查@EdMorton cmets,因为您的问题可能更广泛,您可以以不同的方式处理它。干杯!
    猜你喜欢
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多