给定每行一个非负整数的文件 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 工具。
更新:感谢所有的答案,我今天学到了很多!我想接受更多一个答案,但这是不可能的。
我正在搜索从以下格式的文件中获取的命令:
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) 是否有任何实用程序可以在命令行上从流中过滤样本,例如
更新:到目前为止我发现:
sed -n '0~100p'