考虑这个文件:
#!/usr/bin/env bash
cat > example_file.txt <<EOL
group, value
1, 3.21
1, 3.42
1, 3.5
2, 4.1
2, 4.2
EOL
在下面的脚本中,我按第一列中的值对该文件的行进行分组(第一列中的值已经排序)并将每个组打印到一个单独的 txt 文件中:
var=$(echo 'example_file.txt')
var2=$(echo $var|sed "s/.txt//g")
mkdir -p output
cat $var | awk -v varn="$var2" -F, 'FNR == 1 {header = $0;next} !seen[$1]++ { print header > ("output/"varn"_"$1".txt") }{print > ("output/"varn"_"$1".txt");}'
问题
如何将结果打印到压缩流"output/"varn"_"$1".gz"
(而不是未压缩的 txt 文件"output/"varn"_"$1".txt"
)?
(因此所需的输出与现在生成的脚本相同,只是我希望将输出的文件压缩并保存到.txt.gz
而不是像现在的代码那样的纯文本文件)。
(我尝试gzip >
在{print}
块内使用但无济于事:(
(PS 我是一个 awk 菜鸟,所以这个问题可能是一个非常愚蠢的问题。)
您可以通过管道传递到 GNU awk 中的命令
print
。来自GNU awk 手册:所以:
例如: