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

parse text file using awk and store in two variables

我正在尝试像这样解析一个文件:

for NAME in `cat file.txt | grep name | awk '{print }'`
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(or cat!)

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

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

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

另见 don't read lines with for

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