将AWK输出操作保存在变量中,并在另一个bash命令之后使用该变量



我的源文件:

0.txt:

anything1
anything2
anything3
anything4

1.txt如下:

house();
shop("");
house();
shop("");
house();
shop("");

使用时:

awk 
'FNR==1 {++f}
f==1 {a[i++]=$0}
f==2 {if ($0~/house/) {gsub(/house/, a[int(j++/2)%2]) }; print > "a.txt"}
' 
0.txt 1.txt

所以a.txt:

anything1();
shop("");
anything1();
shop("");
anything2();
shop("");

但我想先将内容传递给variable,然后使用该variable使用system():在a.txt上进行写入

awk -v myvar='' 
'FNR==1 {++f}
f==1 {a[i++]=$0}
f==2 {if ($0~/house/) {gsub(/house/, a[int(j++/2)%2]) }; print > $myvar; system("touch $myvar a.txt")}
' 
0.txt 1.txt

此打印名为anything1();anything2();anything1();的文件。。

但打印a.txt为空。

可以将f==2(FNR==1 {++f}中正在处理的当前文件(的输出捕获到myvar变量,然后传递到system()

awk 'FNR==1 {++f; if(f>2) print ""}
f==1   {a[NR]=$0; next}
f==2 &&   FNR%2  {sub(/()/,"(" a[int(FNR/2)+1] ")"); print}
f==3 && !(FNR%2) {sub(/("")/,"("" a[FNR/2+1] "")"); print}' file1 file2 file3
house(anything1);
house(anything2);
house(anything3);
shop("anything2");
shop("anything3");
shop("anything4");

最新更新