在文件中搜索值并删除后续行

时间:2013-06-08 23:22:58

标签: shell unix awk

我正在开发一个shell脚本,但我坚持使用下面的部分。

我有文件sample.txt

S.No    Sub1    Sub2
1       100     200
2       100     200
3       100     200
4       100     200
5       100     200
6       100     200
7       100     200

我想搜索S.No中的sample.txt列。例如,如果我正在搜索值5,我需要最多只有I的行,而不希望S.NO中的值大于5后的行。

输出必须如output.txt

S.No    Sub1    Sub2
1       100     200
2       100     200
3       100     200
4       100     200
5       100     200

5 个答案:

答案 0 :(得分:4)

打印第一行和第一个字段小于或等于5的任何其他行:

$ awk 'NR==1||$1<=5' file
S.No    Sub1    Sub2
1       100     200
2       100     200
3       100     200
4       100     200
5       100     200

答案 1 :(得分:1)

使用perl

perl -ane 'print if $F[$1]<=5' file

答案 2 :(得分:1)

和sed解决方案

n=5
sed "/^$n[[:space:]]/q" filename

sed q命令在打印当前行后退出

答案 3 :(得分:0)

建议的awk依赖于第1列是数字排序的。满足问题标题的通用awk将是:

gawk -v p=5 '$1==p {print; exit} {print}' 

然而,在这种情况下,sed是更好的IMO。使用-i修改输入文件。

答案 4 :(得分:0)

sed '6q' sample.txt > output.txt