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

如何使用awk或sed删除字段长度超过某个阈值的行?,sed,awk,Sed,Awk,我的test.txt文件类似于: aa:bbbbbb:22.3 a:bb:33.2 a:bbbb:22.3 aaaa:bb:39.9 我知道如何对它们进行计数和排序,如下所示: awk -F ':' '{print $2}' test.txt | awk '{print length($0),$0}' | sort -nr 现在我想从文件中删除第一行和第三行,因为这些行中第二个字段(包含“b”)的长度大于3。如何使用awk/sed实现这一点?谢谢。和awk: 这将输出第二个字段大于3的行:

我的test.txt文件类似于:

aa:bbbbbb:22.3
a:bb:33.2
a:bbbb:22.3
aaaa:bb:39.9

我知道如何对它们进行计数和排序,如下所示:

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

现在我想从文件中删除第一行和第三行,因为这些行中第二个字段(包含“b”)的长度大于3。如何使用awk/sed实现这一点?谢谢。

awk

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

$ awk -F: 'length($2)>3' file
aa:bbbbbb:22.3
a:bbbb:22.3
要做相反的事情:

$ awk -F: 'length($2)<=3' file
a:bb:33.2
aaaa:bb:39.9
$awk-F:'length($2)代码用于:

或更一般的:

sed '/.*:.\{2\}:.*/!d' file

非常感谢,很简单。在提取命令后,我太认真地考虑恢复行的问题了!谢谢@Kent;)事实上,我正在考虑让这个标志图片永久化,哈哈
sed '/.*:.\{2\}:.*/!d' file