[英]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.