小编mik*_*iku的帖子

按行号过滤文件

给定每行一个非负整数的文件 L 和文本文件 F,仅保留 F 中那些行号出现在文件 L 中的行的快速方法是什么?

例子:

$ cat L.txt
1
3

$ cat F.txt
Hello World
Hallo Welt
Hola mundo

$ command-in-question -x L.txt F.txt
Hello World
Hola mundo
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个可以处理包含 5 亿个或更多条目的文件 L 的命令;文件 L 按数字排序。

注意:我正在实现 a 的一半,command-in-question但我只是想知道,是否也可以在这里使用一些 Unix 工具。


更新:感谢所有的答案,我今天学到了很多!我想接受更多一个答案,但这是不可能的。

text-processing filter high-performance

18
推荐指数
4
解决办法
3124
查看次数

我可以并行排序吗?

例如,bzippbzipbzip. 有没有这样的并行化工具sort来提高性能?

performance sort

14
推荐指数
3
解决办法
9520
查看次数

Groupwise uniq 命令?

我正在搜索从以下格式的文件中获取的命令:

hello 32
hello 67
hi    2
ho    1212
ho    1390
ho    3000
Run Code Online (Sandbox Code Playgroud)

对于这种格式(通过获取“组”的最后一行进行重复数据删除):

hello 67
hi    2
ho    3000
Run Code Online (Sandbox Code Playgroud)

目前我正在使用 Python 和 Pandas 代码段:

    df = pd.read_csv(self.input().path, sep='\t', names=('id', 'val'))

    # how to replace this logic with shell commands?
    surface = df.drop_duplicates(cols=('id'), take_last=True)

    with self.output().open('w') as output:
        surface.to_csv(output, sep='\t', cols=('id', 'val'))
Run Code Online (Sandbox Code Playgroud)

更新:感谢您的精彩回答。以下是一些基准:

输入文件为 246M,包含 8583313 行。顺序无关紧要。第一列的固定大小为 9 个字符。

输入文件示例:

000000027       20131017023259.0        00
000000027       20131017023259.0        11
000000035       20130827104320.0        01
000000035       20130827104320.0        04
000000043       20120127083412.0        01
...
Run Code Online (Sandbox Code Playgroud)
                              time        space complexity

tac …
Run Code Online (Sandbox Code Playgroud)

awk text-processing group uniq

7
推荐指数
1
解决办法
508
查看次数

从文件或流中获取样本?

是否有任何实用程序可以在命令行上从流中过滤样本,例如

  • 打印文件的每 100 行或
  • 以 0.01 的概率打印出文件的一行或
  • 通过水库采样等算法?

更新:到目前为止我发现:

  • 打印文件的每 100 行:sed -n '0~100p'

streaming filter random stdin

3
推荐指数
1
解决办法
513
查看次数