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

print from match & process several input files

当你仔细审视我过去几周的问题时,你会发现我问过与这个问题类似的问题。我有问题要以要求的格式提出,因为我真的不知道我的问题从何而来。 E. Morton 告诉我不要使用范围表达式。好吧,我不知道它们到底是什么。我在这个论坛上发现了很多与我的问题相似的问题以及有效的答案。

赞:"How to print following line from a match" (e.g.)

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

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

而 1.awk 包含:

    BEGIN { OFS=FS=";"
pattern="row4"
}
go {print} [=11=] ~ 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 命令 'to print from match' 似乎都被忽略了。 如前所述,我被告知不要使用范围表达式。我不知道是怎么回事,也许这个问题与我输入多个文件的方式有关?

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

$ 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;;;;;;;

更新

来自评论

is it possible to combine your awk with: "If ="row5" then write in ="row5" and delete the value "row5" in ? In other words, to move content "row5" in column1, if found there, to new column 6? I could to this with another awk but a combination into one would be nicer

... =="row5"{=; =""} ...

或者,如果您想使用另一个字段而不是 </code>,请将 <code> 替换为相应的字段编号。