我有4列,以;
分隔。
第3或第4列中的某些行很大,超过10000个字符。
除了哪一列,一条特定列的长度超过10000个字符外,如何删除这些行?
我试过那个
awk '{i += (length() + 1); if (i <= 10000) print $ALL}'
但是它取整个文件而不仅仅是特定的列,我想要列的长度,无论它是第3个还是第4个,或者两个都是。
TIA
答案 0 :(得分:5)
您只需要:
$ 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
更改&#34; 3&#34;到1001或其他......
答案 1 :(得分:4)
你可以使用这个awk:
awk -F ';' 'length($3)<10000 && length($4)<10000' file
这将只打印那些字段长度为3且小于10000的行。换句话说,如果这些列中的任何一列长度> = 10000,那么这些行将不会在输出中打印。
答案 2 :(得分:4)
通过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)
答案 3 :(得分:4)
这应该有效:
sed -n '/[^;]\{10001\}/!p' input
或者这个:
sed '/[^;]\{10001\}/d' input