我想执行此操作
awk -F, '$1 ~ /F$/' file.dat
在整个 gzip 文件目录上
我希望能够遍历每个文件解压缩它执行上述命令(打印出任何发现)重新压缩并移动到下一个压缩文件
如何才能做到这一点?
谢谢
好吧,如果您必须将所有内容集中在一行中:
find . -name \*.gz -print0 | xargs -0 gunzip -c | awk -F, '$1 ~ /F$/'
那应该对你有用
在我看来,您想要输出以逗号分隔的字段列表中的第一个字段以“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 命令管道输出,您将得到写出的相关行。
一个shell脚本怎么样:
gunzip $1.gz
awk -F, '$1 ~ /F$/' $1
gzip $1
只要确保$1
没有.gz
扩展名。
那么您可以执行以下操作:
find -name \*.gz -type f|xargs my_shell_script