1列と2列を含むデータ行があります。私がやりたいのは、2列のみを含む行を抽出することです。
0333 foo
bar
23243 qux
降伏のみ:
0333 foo
23243 qux
最初にタブがある列が1つしかない行の場合でも、タブで区切られていることに注意してください。
それを行う方法は何ですか?
私はこれを試しましたが失敗しました:
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
の一部の実装がデフォルトで出力されるためです。空のコマンド{}
これが起こらないことを保証します。
あなたがこれをしないものの1つを持っているのに十分幸運であるならば、あなたは逃げることができます:
awk 'NF==2'
ただし、上記の最初の解決策は両方の場合に機能します。
awk 'NF==2' file
awk '(NF==2){print}' test.txt