从文件中删除行

时间:2009-04-27 14:30:46

标签: python perl text awk text-processing

我正在对unix系统进行一些文本处理。我可以访问这台机器上的命令行,它有Python,Perl和安装的默认文本处理程序,awk等。

我有一个如下所示的文本文件:

2029754527851451717 
2029754527851451717 
2029754527851451717 
2029754527851451717 
2029754527851451717 
2029754527851451717 1232453488239 Tue Mar  3 10:47:44 2009
2029754527851451717 1232453488302 Tue Mar  3 10:47:44 2009
2029754527851451717 1232453488365 Tue Mar  3 10:47:44 2009
2895635937120524206 
2895635937120524206 
2895635937120524206 
2895635937120524206 
2895635937120524206 
2895635937120524206 
5622983575622325494 1232453323986 Thu Feb 12 15:57:49 2009

基本上是3行:ID ID Date

我希望删除所有没有2个ID和日期的行。因此,结果将是这样的:

2029754527851451717 1232453488239 Tue Mar  3 10:47:44 2009
2029754527851451717 1232453488302 Tue Mar  3 10:47:44 2009
2029754527851451717 1232453488365 Tue Mar  3 10:47:44 2009
5622983575622325494 1232453323986 Thu Feb 12 15:57:49 2009

你们怎么建议这样做?总的来说,文本文件大约有30,000行。

干杯

EEF

9 个答案:

答案 0 :(得分:14)

使用awk

awk 'NF > 2' input_file > output_file

答案 1 :(得分:8)

grep ':' filename

答案 2 :(得分:5)

with open(source_filename) as src:
    with open(dest_filename, 'w') as dst:
        for line in src:
            if len(line.split()) > 1:
                dst.write(line)

答案 3 :(得分:4)

使用Perl:

perl -ne 'print if /^([0-9]+\s+){2}.+$/' $filename

答案 4 :(得分:3)

在这里工作我的perl,但这也有帮助:

perl -lane 'if (scalar(@F) == 3) { print @F;}' file >> file.out

答案 5 :(得分:2)

使用Python:

file = open(filename, 'r')
lines = file.readlines()
file.close()

p = re.compile('^\d*$')

for line in lines:
    if not p.search(line): print line,

答案 6 :(得分:1)

awk "NF>1" < filename

答案 7 :(得分:1)

perl -i -lane 'print if($F[1])' file

答案 8 :(得分:-1)

sed '/^[0-9]$/d'  filename

(如果坏行有尾随空格,则可能需要修改模式)。你也可以使用grep -v,它将省略匹配的模式。