当你仔细检查我过去几周的问题时,你会发现我问了类似的问题。因为我真的不知道我的问题来自哪里,所以我有问题以要求的格式提问。 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命令'从匹配打印'似乎被忽略。 据说我被告知不要使用范围表达。我不知道怎么也许问题与我输入几个文件的方式有关?
答案 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
替换为相应的字段编号。