有没有办法在一行上写多个awk命令?

时间:2015-08-11 15:40:16

标签: awk

是否有一个明确的方法用管道编写以下内容以避免临时文件重定向?

awk '{gsub("Sat ", "Sat. ");print}' Sat.txt >win.txt
awk '{gsub(" 1-0", "");print}' win.txt >loss.txt
awk '{gsub(" 0-1", "");print}' loss.txt >draw.txt
awk '{gsub(" 1/2-1/2", "");print}' draw.txt >$TARGET

2 个答案:

答案 0 :(得分:2)

您可以在gsub()中拥有任意数量awk。它们中的每一个都将替换$0,因此每次您将使用修改后的字符串。

但是,请注意,您可以使用一些正则表达式将gsub()压缩为其中两个:

awk '{gsub("Sat ", "Sat. "); gsub(/ (1-0|0-1|1\/2-1\/2)/, "")}1' file
#                                    ^^^ ^^^ ^^^^^^^^^
#                                    1-0 0-1  1/2-1/2

第一个用Sat替换Sat.,第二个用1-00-11/2-1/2删除空格+。

测试

$ cat a
hello Sat is now and 1-0 occurs there when 0-1 results happen but 1/2-1/2 also
bye
$ awk '{gsub("Sat ", "Sat. "); gsub(/ (1-0|0-1|1\/2-1\/2)/, "")}1' file
hello Sat. is now and occurs there when results happen but also
bye

答案 1 :(得分:-1)

您可以使用分号来实现; 下面的代码还用于查找包含Sub和Warning的特定段落,并将其保存到新的sub.txt

例如:-

awk '/Sub/' RS="\n\n" ORS="\n\n" IMD.txt >sub.txt ; awk '/Warning/' RS="\n\n" ORS="\n\n" IMD.txt >> sub.txt