Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按特定列中的字符数截断文件_Python_Regex_Bash_Awk_Sed - Fatal编程技术网

Python 如何按特定列中的字符数截断文件

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

我有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)通过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
不过是简单的+。