【发布时间】:2010-10-14 02:42:35
【问题描述】:
我想这样做
awk -F, '$1 ~ /F$/' file.dat
整个 gzip 文件目录
我希望能够遍历每个文件解压缩它执行上述命令(打印出任何发现)重新压缩并移动到下一个压缩文件
如何做到这一点?
谢谢
【问题讨论】:
我想这样做
awk -F, '$1 ~ /F$/' file.dat
整个 gzip 文件目录
我希望能够遍历每个文件解压缩它执行上述命令(打印出任何发现)重新压缩并移动到下一个压缩文件
如何做到这一点?
谢谢
【问题讨论】:
一个shell脚本怎么样:
gunzip $1.gz
awk -F, '$1 ~ /F$/' $1
gzip $1
只要确保$1 没有.gz 扩展名即可。
然后您可以执行以下操作:
find -name \*.gz -type f|xargs my_shell_script
【讨论】:
好吧,如果你必须把它全部放在一行中:
find . -name \*.gz -print0 | xargs -0 gunzip -c | awk -F, '$1 ~ /F$/'
应该为你工作
【讨论】:
在我看来,您希望输出以逗号分隔的字段列表中的第一个字段以“F”结尾的行
如果您不关心列出这些行来自哪个 .gz 文件,或 gzip 压缩文件中的哪个文件 - 也就是说,您只希望列出这些行 - 您甚至不必对 .gz 文件进行压缩。 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”参数)上并在文件上运行 zcat。通过您的 awk 命令管道 输出,您将获得写出的相关行。
【讨论】: