输入:
pasdyg:142-2:325:7589:asdrg.
qyashv:178-2:721:9837:querd.
Mhjdst:425-6:865:7589:uyder.
sjuyht:657-2:429:9837:kjthu.
pasdig:146-2:625:7589:asdrg.
qyashv:138-2:321:6837:querw.
rdjdst:419-6:465:7589:uypij.
sjuyrt:667-2:429:9437:kjthy.
我有250个文件,每个文件中有近10 MB的数据。所有文件都具有相同的格式,需要在每行的第18-21个字符之间跳过匹配字符串的行。
输出:
pasdyg:142-2:325:7589:asdrg.
qyashv:178-2:721:9837:querd.
qyashv:138-2:321:6837:querw.
sjuyrt:667-2:429:9437:kjthy.
发布于 2019-07-22 15:30:35
我想你想在第18-21栏中跳过重复值的行
使用Python
data = '''pasdyg:142-2:325:7589:asdrg.
qyashv:178-2:721:9837:querd.
Mhjdst:425-6:865:7589:uyder.
sjuyht:657-2:429:9837:kjthu.
pasdig:146-2:625:7589:asdrg.
qyashv:138-2:321:6837:querw.
rdjdst:419-6:465:7589:uypij.
sjuyrt:667-2:429:9437:kjthy.'''
unique = set()
for line in data.split('\n'):
if line[17:21] not in unique:
unique.add(line[17:21])
print(line)
#print(unique)
结果
pasdyg:142-2:325:7589:asdrg.
qyashv:178-2:721:9837:querd.
qyashv:138-2:321:6837:querw.
sjuyrt:667-2:429:9437:kjthy.
与filter.py
可以从标准输入获取值的脚本相同
#!/usr/bin/env python3
import sys
unique = set()
for line in sys.stdin:
if line[17:21] not in unique:
unique.add(line[17:21])
sys.stdout.write(line)
#print(unique)
所以你可以在Linux上使用
cat data.txt | python filter.py
cat data.txt | python filter.py | other_command
要么
cat data.txt | filter.py
cat data.txt | filter.py | other_command
如果你设置它可执行
chmod u+x filter.py
使用sys.argv
它可以获得参数,即。filter.py 17 21
https://stackoverflow.com/questions/-100007079
复制相似问题