代码之家  ›  专栏  ›  技术社区  ›  user20330606

在进行管道操作时,如何提取文件名的中间部分以将其用于输出文件名?

  •  0
  • user20330606  · 技术社区  · 3 年前

    我有几个文件名,如xxxxxx_1111_xxxxxx_xxxxxxxxx.vcf,其中只有“1111”部分不同。我需要在它上运行awk来提取这些文件的一部分,当我这样做时,我想根据文件的名称重命名输出。我的代码如下所示:

    for i in *_xxxxxx_xxxxxxxxx.vcf
    do 
        awk 'substr($0,1,3)=="zzz"' $i > ${i%??}_edited.vcf
    done
    
    

    我基本上只想提取1111,并确保调用输出文件 1111.定义的vcf .

    长度也各不相同。。。它并不总是4个字符。

    0 回复  |  直到 3 年前
        1
  •  1
  •   Nic3500 tpdi    3 年前

    您可以尝试:

    #!/bin/bash
    
    find . -type f -name "*_xxxxxx_xxxxxxxxx.vcf" -print0 | while IFS= read -r -d '' file
    do
        awk 'substr($0,1,3)=="zzz"' "$file" > "$(echo "$file" | cut -d'_' -f2)"_edited.vcf
    done