1

我正在开发一个 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.Nosample.txt。例如,如果我正在搜索值5,我只需要最多 5 的行,I不希望 in 的值S.NO大于 5 之后的行。

输出必须看起来像,output.txt

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

5 回答 5

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
于 2013-06-08T23:27:37.927 回答
1

和 sed 解决方案

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

sedq命令在打印当前行后退出

于 2013-06-09T13:32:21.977 回答
1

使用perl

perl -ane 'print if $F[$1]<=5' file
于 2013-06-08T23:38:38.840 回答
0

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

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

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

于 2013-06-10T04:52:24.440 回答
0
sed '6q' sample.txt > output.txt
于 2013-06-10T08:25:15.753 回答