我有一系列存储在其中的模式foo.txt
,我想遍历这些模式并查看 file 中的哪些匹配行bar.txt
。
while read PWW
do
cat user/dump/bar.txt | awk '/${PWW}/{print $2}' >> user/dump/out.txt
done < user/dump/foo.txt
Run Code Online (Sandbox Code Playgroud)
foo.txt
:
2100001b32
2100001b38
3100001b35
4100001b28
5100001b46
6100001b56
Run Code Online (Sandbox Code Playgroud)
bar.txt
:
2100001b32 good
2100001b38 bad
3100001b35 okay
4100001b28 large
5100001b46 good
6100001b56 bad
Run Code Online (Sandbox Code Playgroud)
想要的out.txt
:
good
bad
okay
large
good
bad
Run Code Online (Sandbox Code Playgroud)
我无法搜索foo.txt
. while 循环运行并给我空输出。我想awk
是${PWW}
从foo.txt
.
我怎样才能让它工作?我的环境是 Solaris 5.10,使用 Korn shell,基本awk
(旧awk
)。
这是一个纯awk解决方案:
$ awk 'FNR==NR{a[$1]=$2; next} {print a[$1]}' bar.txt foo.txt
good
bad
okay
large
good
bad
Run Code Online (Sandbox Code Playgroud)
该脚本首先读取 bar.txt 并将其信息保存在 array 中a
。然后它读取 foo.txt 并打印出相应的值。
FNR==NR{a[$1]=$2; next}
FNR 是从当前文件读取的行数,NR 是迄今为止读取的总行数。因此,如果FNR==NR
,我们仍在读取第一个文件 (bar.txt)。如果是,a[$1]=$2
则用于将条目添加到a
保存这些值的数组中。然后,我们跳过脚本中的其余命令并重新开始next
。
print a[$1]
如果我们到达这里,我们正在读取第二个文件 foo.txt。我们逐行读取 foo.txt。对于每一行,我们查找与第一列中的键对应的值并打印出来。