从匹配打印并处理多个输入文件
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>
替换为相应的字段编号。
当你仔细审视我过去几周的问题时,你会发现我问过与这个问题类似的问题。我有问题要以要求的格式提出,因为我真的不知道我的问题从何而来。 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>
替换为相应的字段编号。