Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix AWK:解压缩并打印文件名和第一行_Unix_Sed_Awk - Fatal编程技术网

Unix AWK:解压缩并打印文件名和第一行

Unix AWK:解压缩并打印文件名和第一行,unix,sed,awk,Unix,Sed,Awk,我正在尝试解压文件夹中的文件并打印第一行LASTMODIFIEDDATE 但下面将打印带“-”的第一行 for file in /export/home/xxxxxx/New_folder/*.gz; do gzip -dc "$file" | awk 'NR=1 {print $0, FILENAME}' | awk '/LASTMODIFIEDDATE/' done 1.如何修改上述代码以打印解压后的文件名。 2.我是一名初学者,欢迎您提出改进上述代码的建议对此进行回应。在这种情况下,

我正在尝试解压文件夹中的文件并打印第一行LASTMODIFIEDDATE

但下面将打印带“-”的第一行

for file in /export/home/xxxxxx/New_folder/*.gz;
do
gzip -dc "$file" |  awk 'NR=1 {print $0, FILENAME}' |  awk '/LASTMODIFIEDDATE/'
done
1.如何修改上述代码以打印解压后的文件名。
2.我是一名初学者,欢迎您提出改进上述代码的建议

对此进行回应。在这种情况下,您可能还想使用grep而不是awk

for file in /export/home/xxxxxx/New_folder/*.gz;
do
    echo $file
    gzip -dc "$file" | grep LASTMODIFIEDDATE
done
几个问题:

如果要处理第一行,第一个
awk
应该有双等号:

awk 'NR==1{...}'
您的第二个
awk
只会看到第一个
awk
的输出,它只显示第一行,因此您不会看到其中包含LASTMODIFIED的任何行,除非它们是第一行。因此,这将显示第一行以及包含LASTMODIFIED的所有行

for ...
do
   echo $file
   gzip -dc  "$file" | awk 'NR==1 || /LASTMODIFIED/'
done
或者你的意思是:

for ...
do
   gzip -dc  "$file" | awk -v file="$file" 'NR==1{print $0 " " file} /LASTMODIFIED/'
done

它将打印文件名后面的第一行以及包含LASTMODIFIED的任何行。

您可能希望
awk-vfile=$file
{print$0,file}
,而不是此时使用
filename
。您可能的意思是
NR==1
只打印第一行(在这种情况下,您可能还希望规则中的
退出
不处理文件的其余部分,您可以将其与
&&&/LASTMODIFIEDDATE/
模式匹配结合起来,在一个awk而不是两个awk中执行此操作。
for ...
do
   echo $file
   gzip -dc  "$file" | awk 'NR==1 || /LASTMODIFIED/'
done