我有一个 .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。
我是一名优秀的程序员,十分优秀!