簡體   English   中英

基於具有AWK的列數過濾行

[英]Filtering Rows Based On Number of Columns with AWK

我有包含單列和兩列的數據行。 我想要做的是提取只包含2列的行。

0333 foo
 bar
23243 qux

只屈服:

0333 foo
23243 qux

請注意,它們是制表符分隔的,即使對於只有一列的行,您在開頭有選項卡。

這樣做的方法是什么?

我試過這個卻失敗了:

awk '$1!="";{print $1 "\t" $2}' myfile.txt

enter code here

您需要使用NF (字段數)變量來控制操作,例如在以下腳本中:

$ echo '0333 foo
>  bar
> 23243 qux' | awk 'NF==2{print}{}'
0333 foo
23243 qux

如果字段數為2,則將打印該行,否則將不執行任何操作。 我有(看似)奇怪的構造NF==2{print}{}的原因是因為如果沒有規則匹配一行, awk某些實現將默認打印。 空命令{}保證不會發生這種情況。

如果你有幸有一個不能做到這一點的人,你可以逃脫:

awk 'NF==2'

但上面的第一個解決方案將適用於這兩種情況。

awk 'NF==2' file
awk '(NF==2){print}' test.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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