如何使用awk解析文本文件并将姓名、箱号分别存储到两个变量
解决方案
你可以直接通过while read逐行读取并拆分字段的方式实现需求,不推荐用for循环遍历命令输出,后者容易受特殊字符、异常空格的影响。
调整后脚本写法
写法1(直接读取匹配行,拆分字段)
# 筛选以name开头的行后逐行拆分 grep '^name' file.txt | while read -r _ NAME _ BOX; do echo "$NAME $BOX" # 此处可添加你需要的其他业务逻辑,NAME、BOX变量可直接使用 done
语法说明:
read命令会按空格自动拆分输入行,变量名按顺序对应拆分后的字段- 这里的
_是占位符,用来丢弃不需要的字段:第一个_对应行首的name,第二个_对应第三个字段box - 剩下的第二个、第四个字段会自动赋值给
NAME、BOX变量
写法2(先通过awk提取目标字段再读取)
如果你习惯用awk做前置处理,也可以这么写:
awk '/^name/ {print $2, $4}' file.txt | while read -r NAME BOX; do echo "$NAME $BOX" # 其他业务逻辑 done
输出结果
用你提供的file.txt内容运行脚本后,输出完全符合预期:
John 2 Joe 3 May 4
内容的提问来源于stack exchange,提问作者Hanhan lee
相关产品推荐
相关产品推荐

