Linux shell命令按行长度过滤文本文件

Modified on: Fri, 08 Nov 2019 03:20:02 +0800

我有一个30gb磁盘映像的borked分区(想想dd if=/dev/sda1 of=diskimage),我需要从中恢复一些文本文件。像foremost这样的数据挖掘工具只能处理具有明确定义标题的文件,即不是纯文本文件,因此我已经找回了我的好朋友strings

strings diskimage > diskstrings.txt生成了一个3GB的文本文件,其中包含一堆字符串,大多数是无用的东西,与我真正想要的文本混合在一起。

大多数人都倾向于长长的,完整的胡言乱语。我感兴趣的东西保证小于16kb,所以我要按行长度过滤文件。这是我用来执行的Python脚本:

infile  = open ("infile.txt" ,"r");
outfile = open ("outfile.txt","w");
for line in infile:
    if len(line) < 16384:
        outfile.write(line)
infile.close()
outfile.close()

这有效,但供将来参考:是否有任何神奇的单行咒语(想想awksed)会按行长度过滤文件?

最佳答案

awk '{ if (length($0) < 16384) print }' yourfile >your_output_file.txt

会打印短于16千字节的行,如您自己的示例所示。

或者如果你喜欢Perl:

perl -nle 'if (length($_) < 16384) { print }' yourfile >your_output_file.txt

相关问答

添加新评论