我有40个文件,每个2GB,存储在NFS架构上.每个文件包含两列:数字ID和文本字段.每个文件都已经过排序和gzip压缩.
如何合并所有这些文件,以便生成的输出也被排序?
我知道sort -m -k 1
应该为未压缩文件做诀窍,但我不知道如何直接使用压缩文件.
PS:我不想要将文件解压缩到磁盘,合并它们以及再次压缩的简单解决方案,因为我没有足够的磁盘空间.
use*_*342 16
这是进程替换的用例.假设您有两个要排序的文件,sorta.gz
并且sortb.gz
.您可以gunzip -c FILE.gz
使用<(...)
shell运算符给出输出以对这两个文件进行排序:
sort -m -k1 <(gunzip -c sorta.gz) <(gunzip -c sortb.gz) >sorted
Run Code Online (Sandbox Code Playgroud)
进程替换使用表示该命令输出的文件名替换命令,并且通常使用命名管道或/dev/fd/...
特殊文件实现.
对于40个文件,您将需要动态创建具有许多进程替换的命令,并用于eval
执行它:
cmd="sort -m -k1 "
for input in file1.gz file2.gz file3.gz ...; do
cmd="$cmd <(gunzip -c '$input')"
done
eval "$cmd" >sorted # or eval "$cmd" | gzip -c > sorted.gz
Run Code Online (Sandbox Code Playgroud)