【发布时间】:2017-09-01 03:41:27
【问题描述】:
我有两个文件 - FileA 和 FileB。 FileA 有 10 个字段,100 行。如果 Field1 和 Field2 匹配,则应更改 Field3。 FileB 有 3 个字段。我正在使用 while 循环读取 FileB 以匹配两个字段并获取应用于字段 3 的值。
while IFS=$'\t' read hostname interface metric; do
awk -v var1=${hostname} -v var2=${interface} -v var3=${metric} '{if ($1 ~ var1 && $2 ~ var2) $3=var3; print $0}' OFS="\t" FileA.txt
done < FileB.txt
在每行迭代中,这会打印 FileB.txt 以及更改的单行。我只希望它打印已更改的行。
请帮忙!
【问题讨论】:
-
一些样本数据会很好:stackoverflow.com/help/mcve
-
您的方法过于复杂、脆弱和缓慢。请参阅 why-is-using-a-shell-loop-to-process-text-considered-bad-practice 和 @GlennJackman's answer。除了循环问题之外,
${hostname}与$hostname没有什么不同,而您真正需要的是"$hostname"- 始终引用您的 shell 变量。
标签: awk while-loop