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

删除特定字符串大于某个值后的行(bash或python),python,bash,awk,sed,Python,Bash,Awk,Sed,我有一个数据文件,上面有这样一个数字列表: 5 5 6 6 4 4 3 3 4 4 3 3 2 2 对于Python,我希望选择第一行,其中有两列数字,打印每一行,并在满足条件时中断循环: >>> while open('somefile.txt') as f: for line in f: print(line, end='') p, q = map(int, line.split())

我有一个数据文件,上面有这样一个数字列表:

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

对于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
>>以f形式打开('somefile.txt'):
对于f中的行:
打印(行,结束=“”)
p、 q=map(int,line.split())

如果p对于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
>>以f形式打开('somefile.txt'):
对于f中的行:
打印(行,结束=“”)
p、 q=map(int,line.split())

如果p考虑以下方法:

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

5 5    
6 6    
4 4    
3 3

1、/[0-3][0-3]
-地址范围从第一行开始,捕获行,直到遇到小于或等于
3
(包括)的2位数字

地址范围由两个用逗号分隔的地址指定 (,). 地址可以是数字、正则表达式或两者的混合


考虑以下sed方法:

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

5 5    
6 6    
4 4    
3 3

1、/[0-3][0-3]
-地址范围从第一行开始,捕获行,直到遇到小于或等于
3
(包括)的2位数字

地址范围由两个用逗号分隔的地址指定 (,). 地址可以是数字、正则表达式或两者的混合


以下是一个awk解决方案:

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

$awk'1$1这里有一个awk解决方案:

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

$awk'1$1你尝试过什么?选择你的武器,尝试一下,否则它就太宽了。看到了吗,我玩了awk,用了awk’(1美元,你试过什么?选择你的武器,试试别的,否则它太宽了。看到了吗,我玩了awk,用了awk’)($1)你介意详细告诉我它是如何工作的吗?我刚学了python,但我仍然很糟糕。我加入了一个更直接的变体。takewhile方法更难正确。很好!这是我一直在寻找的有用的东西。非常感谢!@Raymond我做了一个编辑,我认为这只是一个打字错误-但对你来说是一个改变r print语句,以便它复制代码块中包含的结果-如果需要,请随意还原。您介意详细告诉我它是如何工作的吗?我刚学了python,但我仍然很糟糕。我加入了一个更直接的变体。takewhile方法更难正确。很好!这是一个非常有用的方法我一直在寻找。非常感谢!@Raymond我做了一个编辑,我认为这只是一个打字错误-但是对打印语句进行了更改,这样它可以复制您在代码块中包含的结果-如果您愿意,可以随意还原。这很好,它可以无缝工作!谢谢!:)这很好,它可以无缝工作!谢谢!:)