Bash脚本从文本文件中删除行

时间:2017-01-24 09:05:44

标签: bash shell

我有一个类似这样的文件:

sda             204.98         0.00    104947.26          0     210944
sda             205.50         0.00    104458.00          0     208916
sda             212.50         0.00    108800.00          0     217600
sda             225.00         0.00    114698.00          0     229396
sda             207.00         0.00    105728.00          0     211456
sda             187.00         0.00     94988.00          0     189976
sda             373.50      3704.00      2248.00       7408       4496
sda             419.50      4152.00      2508.00       8304       5016
sda             390.50      3696.00      2506.00       7392       5012

我需要使用bash脚本删除所有行,例如前三行,其中第三列和第五列包含零值,或者替代,其中最后一列具有高值(超过5位数),按顺序获得:

sda             373.50      3704.00      2248.00       7408       4496
sda             419.50      4152.00      2508.00       8304       5016
sda             390.50      3696.00      2506.00       7392       5012

我尝试过使用awk'($ 6< .....)'但没有效果。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

使用awk很容易完成。请尝试以下脚本:

awk -v max=100000 '$3 && $5 && $6 < max' data

这确保字段3和5不为零($ 3是$3 != 0的简写),并且最后一个字段的数字为5或更少。

由于awk的默认行为是打印整行,这将输出满足此条件的所有行。

答案 1 :(得分:2)

您可以在bash脚本中使用awk,例如:

awk '($3 > 0 && $5 > 0) {print}' file

awk '($3 != 0 && $5 != 0) {print}' file

或根据您的编辑(最后一栏中的最小值):

awk '($3 != 0 && $5 != 0) || ($6 > 9999) {print}'

哪里

  • $3$5是第3和第5列变量,
  • 并且脚本检查该列中的值是> 0(大于0)还是!= 0(不等于0),然后
  • printfile
  • 的行