簡體   English   中英

csv中的awk命令:如何打印多個條目?

[英]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 ”。

確保您注意到關系運算符“ ==”(“等於”)與賦值運算符“ =”(“等於”)不同。

如果您希望匹配大量可能的值,並使布爾表達式麻煩,則可以嘗試以下方法之一:

  1. 使用與任何正確值匹配的正則表達式。
    awk -F ',' -v OFS=',' '($3~/^6(3[12357]1|399|411)$/){print}' …
    匹配6311 6321 6331 6351 6371 63996411
  2. 使用值作為索引填充關聯數組,以測試數組的成員資格:
    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
  3. 如果值幸運地在一個范圍內,則只需測試以下內容:
    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM