【问题标题】:Looking for awk command to append filename at end of line寻找 awk 命令以在行尾附加文件名
【发布时间】:2019-11-14 16:59:26
【问题描述】:

我有一个带有文件名的文本文件,我希望将其动态附加到每一行的末尾。例如,我想要以下内容:

/home/danrothaudiodsp/kaldi-trunk/egs/voxforge/s5/voxforge/extracted/1028-20100710-hne/wav/ar-01.wav 

/home/danrothaudiodsp/kaldi-trunk/egs/voxforge/s5/voxforge/extracted/1028-20100710-hne/wav/ar-02.wav 

变成:

/home/danrothaudiodsp/kaldi-trunk/egs/voxforge/s5/voxforge/extracted/1028-20100710-hne/wav/ar-01.wav /home/danrothaudiodsp/gfcc_train/ar-01.gfcc

/home/danrothaudiodsp/kaldi-trunk/egs/voxforge/s5/voxforge/extracted/1028-20100710-hne/wav/ar-02.wav /home/danrothaudiodsp/gfcc_train/ar-02.gfcc

这需要遍历一个包含很多行的大型文本文件。

我已经有以下 awk 命令:

awk '{$2="/home/danrothaudiodsp/gfcc_train/" OFS $2} 1' file > newfile 

但我正在寻找要在 gfcc_train 后面的最后一个“/”之后填写的值。

【问题讨论】:

    标签: regex ubuntu text awk


    【解决方案1】:
    $ awk '{fname=$0; sub(/.*\//,"",fname); sub(/\.[^.]+$/,"",fname); print $0, "/home/danrothaudiodsp/gfcc_train/" fname ".gfcc"}' file
    /home/danrothaudiodsp/kaldi-trunk/egs/voxforge/s5/voxforge/extracted/1028-20100710-hne/wav/ar-01.wav /home/danrothaudiodsp/gfcc_train/ar-01.gfcc
    /home/danrothaudiodsp/kaldi-trunk/egs/voxforge/s5/voxforge/extracted/1028-20100710-hne/wav/ar-02.wav /home/danrothaudiodsp/gfcc_train/ar-02.gfcc
    

    【讨论】:

      【解决方案2】:

      这个表达式,

      ((\/[^\/]+\/[^\/]+\/[^\/]+).+\/(.+)\.wav)
      

      查看并将其翻译为awk 可能会有所帮助。

      DEMO

      【讨论】:

      • 那些在线正则表达式工具的问题是它们没有充分考虑到您要在其中使用正则表达式的命令行工具,因此它们几乎总是验证一些在目标工具,而且目标工具通常具有更简单(或更强大或更好)的方式来完成任务。因此,通常使用在线工具来了解正则表达式很好,但使用一个工具来生成/验证正则表达式以在任何给定的命令行工具中使用实际上是没有用的。
      猜你喜欢
      • 2016-07-20
      • 2013-06-10
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 2020-08-29
      相关资源
      最近更新 更多