繁体   English   中英

如何从awk选择值的文件中打印文件名?

[英]How to print files names from file where awk is selecting values?

我有一个.txt文件,其文件名为

z1.cap
z2.cap
z3.cap
z4.cap

这些文件中的示例数据如下所示,

OTR 25896 PAT210 $TREMD DEST

OFR 21475 NAT102 #TREMD DEST

然后我使用下面的代码从文件中打印所需的值。

while read file_name
do
echo "progressing with file :${file_name}"
cat ${file_name} | grep "PAT210" | awk -F' ' '$5 == "(DEST" { print $file_name, $1}' | uniq >> OUTPUT_FILE

现在我想要包含2个字段的输出,

z1.cap OTR
z2.cap OFR

等等...

但是我越来越喜欢

- OTR
- OFR

感谢您的任何帮助,谢谢。

要访问awk当前正在处理的文件名,请使用内置变量FILENAME

要将外壳中的其他外壳变量绑定到awk中的变量,请使用:

awk -v var1=$shvar1 -v var2=$shvar2 'your awk code using var1 and var2'

假设files.txt包含文件列表,并且对要实现的目标完全不了解:

for file_name in $(cat files.txt)
do
    echo "progressing with file :${file_name}"
    awk -F' ' '($5 == "DEST") && ($3=="PAT210") { print FILENAME, $1}' $file_name | uniq >> OUTPUT_FILE
done

我删除了猫,并将grep合并到您的awk中。 猫是不必要的,因为awk可以读取文件本身。

您可以通过说完全删除for循环

awk -F' ' '($5 == "DEST") && ($3=="PAT210") { print FILENAME, $1}' $(<files.txt) | uniq >> OUTPUT_FILE

$(<files.txt)将把每个文件名发送到awk。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM