使用awk解析文本文件并存储在两个变量中



我正试图解析一个文件,就像:

for NAME in `cat file.txt | grep name | awk '{print $2}'`
do
echo " $NAME  "
......
done

file.txt内容:

name John box 2
name Joe box 3
name May box 4

然后它将打印:

John
Joe
May 

但现在我想同时得到盒子的编号,我需要将名称和盒子存储在两个变量中,如何做到这一点?

预期结果:

echo "$NAME $BOX"
John 2
Joe 3
May 4

这里根本不需要Awk(或cat!(。

grep '^name' file.txt |
while read -r _ name _ box;
do
echo " $name $box "
......
done

或者,如果你只想打印这两个字段,而不想对这些变量做任何事情,只需

awk '/^name/ { print $2, $4 }' file.txt

另请参阅不要使用for读取行

更根本的是,您可能希望修改文件格式,这样就不必在每一行都指定标签(或者,如果这真的很有用,可能会使用允许这种结构的标准文件格式,比如JSON或YAML(。

最新更新