特定字符串后的删除线大于值(bash或python)



我有一个数据文件,其中包含这样的数字列表:

5 5
6 6
4 4
3 3
4 4
3 3
2 2

我希望挑选出具有数字< = 3的两个列的第一行,然后删除所有行。因此,我的结果文件将是:

5 5 
6 6
4 4 
3 3

有人知道如何使用尴尬/sed吗?

这是一个尴尬解决方案:

$ awk '1; $1<=3&&$2<=3{exit}' file
5 5
6 6
4 4
3 3

解释:

awk '
1;                           # output record
$1 <= 3 && $2 <= 3 { exit }  # if it was as requested, exit
' file

考虑以下 sed 方法:

sed -n '1,/[0-3] [0-3]/p' file

输出:

5 5    
6 6    
4 4    
3 3

1,/[0-3] [0-3]-从第一行开始,并捕获线直到遇到2个数字,而少于3(包括(。

指定一个地址范围,两个地址由逗号分隔 (,(。地址可以是数字,正则表达式,也可以是两者的混合。

对于Python,在满足您的条件时打印每一行,然后脱离循环:

>>> while open('somefile.txt') as f:
        for line in f:
            print(line, end='')
            p, q = map(int, line.split())
            if p <= 3 or q <= 3:
                break

5 5
6 6
4 4
3 3

这是一个尴尬解决方案:

$ awk 'BEGIN {flag=0} flag==0 {print ; flag=$1<=3 && $1<=3}' somefile.txt
5 5
6 6
4 4
3 3

最新更新