次の形式のタブで区切られたテキストファイルがあります。
Name city info
Stef NY=123 ID=1;CITY=NY
John SE=981;819 ID=110;CITY=SE
Stef SE=01 ID=20;CITY=SE
Kelly SE=111;787 ID=100;CITY=NY
Lena NY=815;981;1 ID=2111;CITY=NY
3番目の列では、IDが100を超える新しいテキストファイルに行を抽出しようとしているため、予想される出力は次のとおりです。
Name city info
John SE=981;819 ID=110;CITY=SE
Lena NY=815;981,1 ID=2111;CITY=NY
これまで持っているawkコマンドは次のとおりです。
awk '$3 !~ /^ID=[0-9];/' file.txt > output.txt
ただし、これによりIDが9以下の行のみが削除されます。 IDが100未満のすべての行を除外する方法がわかりません。どうすればこれを達成できますか?洞察力を高く評価いたします。
ベストアンサー1
使用ミラー
$ mlr --tsv filter 'i = splitkv($info, "=", ";"); i["ID"] > 100' file.txt
Name city info
John SE ID=110;CITY=SE
Lena NY ID=2111;CITY=NY
GNU awkを使う:
$ gawk -F '\t' 'NR==1 || match($3,/ID=([0-9]+)/,arr) && arr[1]+0 > 100' file.txt
Name city info
John SE ID=110;CITY=SE
Lena NY ID=2111;CITY=NY