部分文字列を見つけて、テキストファイルから次の行を抽出します。

部分文字列を見つけて、テキストファイルから次の行を抽出します。

次の形式のタブで区切られたテキストファイルがあります。

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

おすすめ記事