如何在 .gz 文件上使用 awk 提取信息而不将未压缩的数据存储在磁盘上

use*_*102 3 awk gzip

我需要使用这个命令:

awk 'NR==FNR {a[$1]; next} $1 in a{print}' inputfile1.txt inputfile2.gen.gz >output.txt
Run Code Online (Sandbox Code Playgroud)

Awk 不读取 .gz 文件。

我试过了

zcat inputfile2.gz | awk 'NR==FNR {a[$1]; next} $1 in a{print}' inputfile1.txt inputfile2.gen.gz >output.txt
Run Code Online (Sandbox Code Playgroud)

它仍然不起作用。

tri*_*eee 7

给 Awk 一个破折号参数来读取它的标准输入。

zcat inputfile2.gz |
awk 'NR==FNR {a[$1]; next}
    $1 in a' inputfile1.txt - >output.txt
Run Code Online (Sandbox Code Playgroud)

(还要注意我去掉了,{print}因为这已经是 Awk 中隐含的默认操作。)

  • 不,Awk 只读取和写入文本,并且只读取您告诉它的文件。你给它`-` 表示“读取标准输入,而不是磁盘上的文件”。管道到 `gzip` 以压缩输出。`zcat | awk 的东西... | gzip >output.gz` 并阅读管道以了解这些部分是如何组合在一起的。 (2认同)