首页 > 解决方案 > bash 解析空格分隔的文本文件

问题描述

示例文件

aaa [bbb bb] ccc "ddd dd" eee
bbb [ccc cc] ddd "eee ee" fff

预期的:

line1
s1="aaa", s2="bbb bb", s3="ccc", s4="ddd dd", s5="eee"
line2
s1="bbb", s2="ccc cc", s3="ddd", s5="eee ee", s5="fff"

提前致谢!

标签: bashawkseed

解决方案


使用gnu awk你可以使用这个:

awk -v OFS=", " -v FPAT='\\[[^]]*\\]|"[^"]*"|[^[:space:]]+' '{
   for (i=1; i<=NF; i++) {
      gsub(/^[["]|[]"]$/, "", $i)
      $i = "s" i "=\"" $i "\""
   }
   $0 = "line" NR ORS $0
} 1' file

输出:

line1
s1="aaa", s2="bbb bb", s3="ccc", s4="ddd dd", s5="eee"
line2
s1="bbb", s2="ccc cc", s3="ddd", s4="eee ee", s5="fff"

推荐阅读