2017-04-10 62 views
0

當你仔細檢查我過去幾周的問題時,你會發現我提出了類似於這個問題的問題。由於我不知道我的問題來自哪裏,因此我有問題需要格式提問。 E. Morton告訴我不要使用範圍表達式。那麼,我不知道他們是什麼樣的。我在這個論壇中發現了許多問題,就像我的工作答案一樣。從匹配和處理幾個輸入文件打印

像:「如何打印以下從匹配線」(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命令「從匹配打印」似乎被忽略。 正如我所說的,我被告知不要使用範圍表達式。我不知道如何,也許這個問題與我輸入多個文件的方式有關?

回答

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

UPDATE

年初從評論

是有可能你的AWK有機結合起來:「如果$ 1 =「row5」然後在 中寫入$ 6 =「row5」並刪除$ 5中的值「row5」?換句話說,要移動 內容「ro如果在那裏找到第1列中的「w5」,則將其添加到新列6中?我可以與其他的awk 這一點,但組合成一個會更好

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

,或者,如果你想使用其他領域,而不是$5與相應的字段編號替換$5

+0

根據OP可能有很多文件,那麼它可能會給錯誤,如太多的文件打開等,我猜。 – RavinderSingh13

+1

您的猜測不正確。輸入文件一次處理一個並正確關閉。 – karakfa

+0

謝謝你karakfa。最終它起作用,我更接近我的目標。出於好奇......是否有可能將awk與:「如果$ 1 =」row5「然後寫入$ 6 =」row5「並刪除$ 5中的」row5「值?換句話說,要移動內容」row5「在第一列中,如果在那裏找到新的列6,我可以用另一個awk來做到這一點,但是組合成一個更好。 – prestalearner