删除字段中具有特定数值的行

时间:2017-01-01 20:06:46

标签: bash unix sed

我有一个非常庞大的文件,大约有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做到这一点?

2 个答案:

答案 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]+) - 将匹配099的数字或带前导零的数字(例如01200982

d - 删除模式空间;

-E--regexp-extended) - 使用扩展正则表达式而不是基本正则表达式

要删除匹配的行 ,请使用-i选项:

sed -i -E  '/^\w+\s+([0-9]{1,2}|[0][0-9]+)\b/d' /tmp/test.txt