我有一个非常庞大的文件,大约有1M行:
4001 168991 11191 74554 60123 37667 125750 28474
8 145 25 101 83 51 124 43
2985 136287 4424 62832 50788 26847 89132 19184
3 129 14 101 88 61 83 32 1 14 10 12 7 13 4
6136 158525 14054 100072 134506 78254 146543 41638
1 40 4 14 19 10 35 4
2981 112734 7708 54280 50701 33795 75774 19046
7762 339477 26805 148550 155464 119060 254938 59592
1 22 2 12 10 6 17 2
6 136 16 118 184 85 112 56 1 28 1 5 18 25 40 2
1 26 2 19 28 6 18 3
4071 122584 14031 69911 75930 52394 89733 30088
1 9 1 3 4 3 11 2 14 314 32 206 253 105 284 66
我想删除第二列中值小于100的行。
如何用sed做到这一点?
答案 0 :(得分:6)
我会用awk来做这件事。例如:
awk ' $2 >= 100 ' file.txt
这只会显示file.txt中列$2
大于100的每一行。
答案 1 :(得分:1)
使用以下方法:
sed '/^\w+\s+([0-9]{1,2}|[0][0-9]+)\b/d' -E /tmp/test.txt
(用您当前的文件路径替换/tmp/test.txt
)
([0-9]{1,2}|[0][0-9]+)
- 将匹配0
到99
的数字或带前导零的数字(例如012
,00982
)
d
- 删除模式空间;
-E
(--regexp-extended
) - 使用扩展正则表达式而不是基本正则表达式
要删除匹配的行 ,请使用-i
选项:
sed -i -E '/^\w+\s+([0-9]{1,2}|[0][0-9]+)\b/d' /tmp/test.txt