首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用shell脚本[暂停]跳过文件中匹配字符串(第18-21字符)的所有行

如何使用shell脚本[暂停]跳过文件中匹配字符串(第18-21字符)的所有行
EN

Stack Overflow用户
提问于 2019-07-22 06:21:35
回答 1查看 0关注 0票数 0

输入:

代码语言:javascript
复制
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个字符之间跳过匹配字符串的行。

输出:

代码语言:javascript
复制
pasdyg:142-2:325:7589:asdrg.                                                       
qyashv:178-2:721:9837:querd.                                                       
qyashv:138-2:321:6837:querw.                                                       
sjuyrt:667-2:429:9437:kjthy.                                                            
EN

Stack Overflow用户

发布于 2019-07-22 15:30:35

我想你想在第18-21栏中跳过重复值的行

使用Python

代码语言:javascript
复制
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)        

结果

代码语言:javascript
复制
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可以从标准输入获取值的脚本相同

代码语言:javascript
复制
#!/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上使用

代码语言:javascript
复制
cat data.txt | python filter.py

cat data.txt | python filter.py | other_command

要么

代码语言:javascript
复制
cat data.txt | filter.py

cat data.txt | filter.py | other_command

如果你设置它可执行

代码语言:javascript
复制
chmod u+x filter.py

使用sys.argv它可以获得参数,即。filter.py 17 21

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档