解压缩文件并使用 AWK 和管道处理其内容

Sam*_*und 2 pipe zip awk

我需要解压缩日志文件,然后使用 awk 显示该日志文件的一些特定列。可以使用管道来完成吗?

unzip log.zip | awk -F "- -" '{pring $1 " " $2} >newfile
Run Code Online (Sandbox Code Playgroud)

cas*_*cas 6

您需要使用unzip's-c选项将 .zip 文件的内容解压缩到标准输出......否则它将把 .zip 文件中的文件解压缩到磁盘上,并且不会有任何内容可以通过管道传输到awk

就像许多源自 MS-DOS/Windows 而不是 Unix 的程序一样,它们unzip也冗长地讲述它正在做什么。Unix 程序通常不会这样做,除非您使用-vor--verbose--debug选项或类似选项明确告诉它们这样做。这是 dos/windows 和 unix 软件之间的显着文化差异。和程序员。

从任何在 stdin 上获取输入的程序的 POV 来看,这几乎肯定是会混淆它的垃圾(这就是为什么 UNIX 程序并不冗长,除非你告诉它们如此)。因此,请使用(安静)或(特别安静)选项unzip来告诉“闭嘴并开始工作” 。-q-qq

例如

unzip -qq -c log.zip | awk -F'- -' '{print $1, $2}' >newfile
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我awk稍微改变了你的脚本。我修复了pring语法错误。另外,默认的输出字段分隔符 ( OFS)awk是一个空格...即使您将输入字段分隔符 ( FS) 设置为其他内容(例如使用-F'- -')。所以我只是打印$1,$2- 不需要使用双引号空格字符。