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

时间:2013-07-08 08:51:45

标签: 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


现在我想从文件中删除第1行和第3行,因为这些行中第二个字段(包含“b”)的长度大于3.我怎么能用awk / sed做到这一点?感谢。

2 个答案:

答案 0 :(得分:5)

使用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

答案 1 :(得分:4)

的代码:

sed '/.*:..:.*/!d' file

或更一般:

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