我有一个修改 .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。同样,可能有更好的方法来完成您想要做的任何事情,但如果没有示例输入/输出,我所能做的就是复制您的脚本。