Python 如何按特定列中的字符数截断文件
我有4列,由Python 如何按特定列中的字符数截断文件,python,regex,bash,awk,sed,Python,Regex,Bash,Awk,Sed,我有4列,由分隔 第3列或第4列中的某些行非常大,超过10000个字符 如果一个特定列的长度超过10000个字符,那么无论是哪列,如何删除这些行 我试过了 awk '{i += (length() + 1); if (i <= 10000) print $ALL}' awk'{i+=(length()+1);如果(i您可以使用此awk: awk -F ';' 'length($3)<10000 && length($4)<10000' file awk-F
分隔代码>
第3列或第4列中的某些行非常大,超过10000个字符
如果一个特定列的长度超过10000个字符,那么无论是哪列,如何删除这些行
我试过了
awk '{i += (length() + 1); if (i <= 10000) print $ALL}'
awk'{i+=(length()+1);如果(i您可以使用此awk:
awk -F ';' 'length($3)<10000 && length($4)<10000' file
awk-F';''长度($3)通过sed
sed '/^[^;]*;[^;]*;\([^;]\{10001\}[^;]*;[^;]*|[^;]*;[^;]\{10001\}[^;]*\)$/d' file
通过python
import csv
with open('/path/to/input/file') as infile:
reader = csv.reader(infile, delimiter=";")
for row in reader:
if len(row[2]) <= 10000 and len(row[3]) <= 10000:
print(row)
导入csv
以open('/path/to/input/file')作为填充:
reader=csv.reader(填充,分隔符=“;”)
对于读取器中的行:
如果len(第[2]行)小于p>这应该可以工作:
sed -n '/[^;]\{10001\}/!p' input
或者这个:
sed '/[^;]\{10001\}/d' input
您所需要的只是:
$ cat file
a;b;c
d;efg;h
i;j;klm
opqr;s;t
uv;wx;yz
$ egrep -v '[^;]{3}' file
a;b;c
uv;wx;yz
$ awk '!/[^;]{3}/' file
a;b;c
uv;wx;yz
$ sed -r '/[^;]{3}/d' file
a;b;c
uv;wx;yz
如果第三列或第四列的长度超过10000个字符,则将“3”更改为1001或其他任何内容。如果第三列或第四列的长度超过10000个字符,是否要删除整行?您好,是整行。感谢Anubhava。这更像是一个或,我想是awk-F';''长度($3)但是你写了如何删除行,不管是哪列,其中一个特定列的长度超过10000个字符?
我是这样想的:如果第3列超过10000个字符,再见,但是如果第4列超过10000个字符,也再见。这是你理解的吗?这里有一点布尔逻辑。如果我们称为con另外,为了简洁起见,length($3)>=10000
A
,同样地,B
对于$4
上的条件。那么,当您要删除一行时,条件是A | B
。保留该行的条件是awk
想要的,然后是!(A | B)
,根据德摩根定律,它相当于!A&&!B
。这正是上面@anubhava提供的条件所代表的……谢谢@twalberg:这就是我试图在我的答案下面用简单的话解释的,但你的布尔逻辑让它非常清晰。你比我快了几秒钟,投赞成票!我知道这个答案我的问题,但我会用这个:sed'/\(^\\\\;\)[^;]{10001\}/d'输入作为更一般的答案(也适用于第一列)。你是对的,我错了。我真的需要再来一杯咖啡。对于sed,我想\{10001\
不起作用,你需要一杯[^;]{10001\}
,由于可能使用了分隔符,因此不应小题大做-egrep
不过是简单的+。