在 Mac 终端中的一组文件上运行代码

在 Mac 终端中的一组文件上运行代码

我有一个修改 .txt 文件的脚本

这是我的脚本

awk 'BEGIN{FS=OFS="\t"}{split($1,a,"_"); split(a[3],b,"/"); print a[1],a[2],b[1],b[2],$0}' file.txt | awk 'BEGIN{FS=OFS="\t"}{split($18,a,";"); split(a[2],b,"="); print b[2],$0}' > out_file.txt 

我的文件夹中有一堆文件

我想在我的文件上运行此脚本并按原始文件的名称返回每个输出

我试过这个

 > for  i in `find . -maxdepth 1 -type f -iname "*.txt" awk 'BEGIN{FS=OFS="\t"}{split($1,a,"_"); split(a[3],b,"/"); print a[1],a[2],b[1],b[2],$0}'| awk 'BEGIN{FS=OFS="\t"}{split($18,a,";"); split(a[2],b,"="); print b[2],$0}'print > out}' *.txt
-bash: syntax error near unexpected token `|'
(base) user112$

但什么也没发生

答案1

for i in *.txt; do
    
    awk 'BEGIN{FS=OFS="\t"}{split($1,a,"_"); split(a[3],b,"/"); print a[1],a[2],b[1],b[2],$0}' $i | awk 'BEGIN{FS=OFS="\t"}{split($18,a,";"); split(a[2],b,"="); print b[2],$0}' > $i'_1'.txt
done

答案2

这就是你想做的吗?

awk '
    BEGIN { FS=OFS="\t" }
    FNR == 1 {
        close(out)
        out = FILENAME "_1.txt"
    }
    {
        split($1,a,/_/)
        split(a[3],b,"/")
        $0 = a[1] OFS a[2] OFS b[1] OFS b[2] OFS $0
        split($18,a,/;/)
        split(a[2],b,/=/)
        print b[2], $0 > out
   }
' *.txt

不需要 shell 循环或管道到多个命令,就像我在以您的其他名字发布的上一个问题中向您展示的那样:https://unix.stackexchange.com/a/605896/133219。同样,可能有更好的方法来完成您想要做的任何事情,但如果没有示例输入/输出,我所能做的就是复制您的脚本。

相关内容