如何使用awk或sed删除字段长度超过某个阈值的行?

new*_*ave 0 awk sed

我有类似的文件test.txt:

aa:bbbbbb:22.3
a:bb:33.2
a:bbbb:22.3
aaaa:bb:39.9
Run Code Online (Sandbox Code Playgroud)


我知道如何计算和排序它们:

awk -F ':' '{print $2}' test.txt | awk '{print length($0),$0}' | sort -nr
Run Code Online (Sandbox Code Playgroud)


现在我想从文件中删除第1行和第3行,因为这些行中第二个字段(包含"b")的长度大于3.如何使用awk/sed执行此操作?谢谢.

fed*_*qui 5

awk:

这将输出第二个字段> 3的行:

$ awk -F: 'length($2)>3' file
aa:bbbbbb:22.3
a:bbbb:22.3
Run Code Online (Sandbox Code Playgroud)

做相反的事情:

$ awk -F: 'length($2)<=3' file
a:bb:33.2
aaaa:bb:39.9
Run Code Online (Sandbox Code Playgroud)