首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk脚本中的Gunzip

awk脚本中的Gunzip
EN

Unix & Linux用户
提问于 2022-01-27 13:24:22
回答 2查看 340关注 0票数 1

我正在awk脚本中创建一个输出文件,然后我想压缩它。

输入文件- Marks.txt

代码语言:javascript
复制
Student1:AP:Maths:30:Science:43
Student2:AP:Maths:23:Science:35
Student3:Non_AP:Maths:17:Science:33

我的代码如下所示

代码语言:javascript
复制
BEGIN{
   FS = ":"
}

$2 == "AP"{
 print $3, $4 > "maths_AP.txt"
}

$2 == "Non_AP"{
 print $3, $4 > "maths_non_AP.txt"
}

{...} #some other processing not relevant to question

我希望同时创建maths_AP.txtmaths_non_AP.txt作为压缩文件。一些论坛建议使用gunzip函数,但我不明白如何将它放在脚本中。

EN

回答 2

Unix & Linux用户

发布于 2022-01-27 13:59:54

Awk是一个操作文本的工具。shell是用来操作(创建/销毁)文件和进程以及对其他工具进行排序调用的工具。因此,通常不应该从awk内部对其他工具进行顺序调用,因为这是shell的工作,而是使用awk操作文本,然后让shell调用任何其他工具,例如未经测试的工具:

代码语言:javascript
复制
mkdir out &&
sort -t':' -k3,3 -k2,2 Marks.txt |
awk '
    BEGIN { FS=OFS=":" }
    { key = "out/" $3 "_" $2 ".txt" }
    key != out {
        close(out)
        out = key
    }
    { print > out }
' &&
for file in out/*.txt; do
    zip "$file" &&
    rm -f "$file"         # assuming you want to discard the .txt file
done

上面的工具将使用任何版本的工具。在大多数awk版本中,任何不调用close()的awk解决方案都会失败,一旦您超过了某个同时打开的文件数的阈值,而我已经看到该阈值小于20。

票数 8
EN

Unix & Linux用户

发布于 2022-01-27 13:40:09

压缩可以在awk运行之后或运行期间进行。

试一试

代码语言:javascript
复制
$2 == "AP"{
 print $3, $4 > "maths_AP.txt" ;
 print $3, $4 | "gzip > maths_AP.gz" ;
}

$2 == "Non_AP"{
 print $3, $4 > "maths_non_AP.txt" ;
 print $3, $4 | "gzip > maths_non_AP.gz" ;
}
  • 如果要写入的文件太多,您可能会耗尽文件描述符。
  • 我很久以前就结束了;的陈述,后来才意识到这是一种选择。
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/688173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档