1

我想执行此操作

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

在整个 gzip 文件目录上

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

如何才能做到这一点?

谢谢

4

3 回答 3

3

好吧,如果您必须将所有内容集中在一行中:

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

应该对你有用

于 2009-03-18T16:06:07.763 回答
2

在我看来,您想要输出以逗号分隔的字段列表中的第一个字段以“F”结尾的行

如果您不关心列出这些行来自哪个 .gz 文件,或者在 gzip 压缩文件中列出哪个文件 - 也就是说,您只希望列出这些行 - 您甚至不必先对 .gz 文件进行压缩,这样您就不必重新压缩它们。

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

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

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

这表示要查找以“.gz”结尾的文件并用 NUL 终止符(-print0 中的 0)写入它们的名称,通过 xargs 管道输出,这将根据 NUL 字符(“-0”arg ) 并在文件上运行 zcat。通过您的 awk 命令管道输出您将得到写出的相关行。

于 2009-03-18T16:13:17.183 回答
0

一个shell脚本怎么样:

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

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

那么您可以执行以下操作:

find -name \*.gz -type f|xargs my_shell_script
于 2009-03-18T15:32:17.033 回答