gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:04:41 24 4
gpt4 key购买 nike

我有一个 .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

要将 shell 中的其他 shell 变量绑定(bind)到 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

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

你可以完全删除 for 循环

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

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

关于linux - 如何从 awk 选择值的文件中打印文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53411222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com