从匹配&打印处理多个输入文件

时间:2017-04-10 15:45:26

标签: awk gawk

当你仔细检查我过去几周的问题时,你会发现我问了类似的问题。因为我真的不知道我的问题来自哪里,所以我有问题以要求的格式提问。 E.莫顿告诉我不要使用范围表达。好吧,我不知道他们是什么。我在这个论坛上发现了许多类似于我的工作答案的问题。

赞:“如何从比赛中打印以下一行”(e.g.

但是当我处理多个输入文件时,我发现所有解决方案都停止工作。我需要处理很多。 我用这个命令:

gawk -f 1.awk print*.csv > new.txt

而1.awk包含:

    BEGIN { OFS=FS=";"
pattern="row4"
}
go {print} $0 ~ pattern {go = 1}

输入文件1 print1.csv包含:

row1;something;in;this;row;;;;;;;
row2;something;in;this;row;;;;;;;
row3;something;in;this;row;;;;;;;
row4;don't;need;to;match;the;whole;line,;
row5;something;in;this;row;;;;;;;
row6;something;in;this;row;;;;;;;
row7;something;in;this;row;;;;;;;
row8;something;in;this;row;;;;;;;
row9;something;in;this;row;;;;;;;
row10;something;in;this;row;;;;;;;

输入文件2 print2.csv包含的内容仅用于说明目的。

1.awk(以及我在此论坛中找到的其他几种从匹配中打印的方式)适用于一个文件。输出:

row5;something;in;this;row;;;;;;;
row6;something;in;this;row;;;;;;;
row7;something;in;this;row;;;;;;;
row8;something;in;this;row;;;;;;;
row9;something;in;this;row;;;;;;;
row10;something;in;this;row;;;;;;;

但是当我处理更多输入文件时。 每次我以这种方式处理多个输入文件awk命令'从匹配打印'似乎被忽略。 据说我被告知不要使用范围表达。我不知道怎么也许问题与我输入几个文件的方式有关?

1 个答案:

答案 0 :(得分:2)

只需在每个文件的开头重置匹配指示符

$ awk 'FNR==1{p=0} p; /row4/{p=1} ' file1 file2

row5;something;in;this;row;;;;;;;
row6;something;in;this;row;;;;;;;
row7;something;in;this;row;;;;;;;
row8;something;in;this;row;;;;;;;
row9;something;in;this;row;;;;;;;
row10;something;in;this;row;;;;;;;
row5;something;in;this;row;;;;;;;
row6;something;in;this;row;;;;;;;
row7;something;in;this;row;;;;;;;
row8;something;in;this;row;;;;;;;
row9;something;in;this;row;;;;;;;
row10;something;in;this;row;;;;;;;

<强>更新

来自评论

  

是否可以将你的awk与:&#34;如果$ 1 =&#34; row5&#34;然后写进去   $ 6 =&#34; ROW5&#34;并删除值&#34; row5&#34; 5美元?换句话说,要移动   内容&#34; row5&#34;在column1中,如果在那里找到,则到新的第6列?我可以   这与另一个awk,但组合成一个将更好

... $1=="row5"{$6=$5; $5=""} ...

或者,如果您想使用其他字段而不是$5,请将$5替换为相应的字段编号。