[英]compare files awk, print matches and concatenate if there is more than one match
[英]awk command in csv: How do I print more than one entry?
我目前正在處理一個電子表格項目,在該項目中,我需要將其抽出一個副本,其中僅在列中包含特定條目。 這就是我在第3列中找到的一項。
awk -F ',' -v OFS=',' '($3=6411){print}' testdata.csv > testdatacopy.csv
但是如果我想找到6411以及另一個條目(例如6311),該怎么辦?
我試過了:
awk -F ',' -v OFS=',' '($3=6411,6311){print}' testdata.csv > testdatacopy.csv
但這沒有用。
參考awk布爾操作 ,您需要類似($3==6411 || $3==6311)
。
另請參閱sed和awk上的書中的第一個“ NOTE ”。
確保您注意到關系運算符“ ==”(“等於”)與賦值運算符“ =”(“等於”)不同。
如果您希望匹配大量可能的值,並使布爾表達式麻煩,則可以嘗試以下方法之一:
awk -F ',' -v OFS=',' '($3~/^6(3[12357]1|399|411)$/){print}' …
6311
6321
6331
6351
6371
6399
或6411
awk … 'BEGIN { '\\
'split("6311 6321 6331 6351 6371 6399 6411", v, " ");'\\
for(i in v){ a[v[i]] = 1;}\\
}($3 in a){print}' file_in.csv > file_out.csv
awk … '($3>=6311 && $3<=6411)' …
模式匹配的默認操作是打印:
awk -F, '$3==6411 || $3==6311' testdata.csv > testdatacopy.csv
或者,您可以使用以下命令進行正則表達式“或”匹配:
awk -F',' -v OFS=',' '($3 ~/6411|6311/){print}' t.csv
編輯:埃德·莫頓(Ed Morton)提出了一個很好的論點-如果ID變成更長的數字,它將匹配“ 64112”和“ 86411”,依此類推,除非您錨定正則表達式以鎖定字段的開始和結束。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.