awkコマンドで名前で列を参照する方法は?

awkコマンドで名前で列を参照する方法は?

したがって、特定の列にスペースがあるタブ区切りの入力ファイルがあります。たとえば、次のようになります。

入力ファイル:

A    B    C    D
1    12   34   545
34        12   56
23   10   15   67
31        99   100

今私の目標は、空白のあるすべての行を次のように出力ファイルに追加することです。

結果ファイル:

34       12    56
31       99    100

だから私はこのコマンドを使って結果を得ました。

awk -F $'\t' '$2 == ""' input_file >> output_file

これは、「B」列が常に位置2にある場合はうまく機能しますが、他の場所にある場合は機能しません。アドレスに「B」列を指定する方法名前awkコマンドに?

ベストアンサー1

AFAIKヘッダーフィールドを繰り返して、一致する列のインデックスを記録する以外に、awkでこれを行う方法はありません。

awk -F '\t' 'NR==1{for(i=1;i<=NF;i++) if($i=="B") bi=i} $bi == ""' file.tsv

Millerにアクセスできる場合は、名前で直接フィルタリングできます。

mlr --tsv filter '$B == ""' file.tsv

または、PythonのCSVKitにあるユーティリティを使用してください。

csvgrep -t -c B -r "." -i file.tsv | csvformat -T

おすすめ記事