gunzip执行任务并重新压缩

时间:2009-03-18 15:29:48

标签: unix awk gunzip

我想要执行此操作

awk -F, '$1 ~ /F$/' file.dat

关于gziped文件的整个目标

我希望能够循环遍历每个文件解压缩它执行上述命令(打印出任何调查结果)重新压缩并移动到下一个压缩文件

怎么办呢?

由于

3 个答案:

答案 0 :(得分:3)

好吧,如果你必须把它全部放在一行:

find . -name \*.gz -print0 | xargs -0 gunzip -c | awk -F, '$1 ~ /F$/'

应该为你工作

答案 1 :(得分:2)

在我看来,您希望输出第一个字段,以逗号分隔的字段列表,以'F'结尾的行

如果你不关心列出哪些.gz文件来自gzipped文件中的哪个.gz文件 - 也就是说,你只想要列出的行 - 你甚至不需要枪杀它们。首先是gz文件,这样你就不必重新压缩它们了。

zcat file.gz | awk -F, '$1 ~ /F$/'

对于当前目录树中的每个文件,请使用带有xargs的find。此示例将其限制为仅当前目录,但只省略“-maxdepth 1”以获取整个目录树

find . -maxdepth 1 -name \*.gz -print0 | xargs -0 zcat | awk -F, '$1 ~ /F$/'

这就是找到以“.gz”结尾的文件,并用NUL终结符(0 in -print0)写出他们的名字,通过xargs输出的管道将根据列表选择列表在NUL字符(“ - 0”arg)上并在文件上运行zcat。通过你的awk命令输出 输出你会得到相关的行。

答案 2 :(得分:0)

shell脚本如何:

gunzip $1.gz
awk -F, '$1 ~ /F$/' $1
gzip $1

请确保$1没有.gz扩展名。

然后你可以做类似的事情:

find -name \*.gz -type f|xargs my_shell_script