如何通过awk从文本中获取每一列?

时间:2018-08-07 14:09:50

标签: awk

文本文件中的内容:

abc [abc d] "abcd e" test
abc [abc d] "-" test

基本上每一列都由空格分隔。但是在某些列的内容中也存在一些空格,在这种情况下,整个内容将用[]或“”包裹,如上例所示。如何通过awk获得正确的列?

正确的列应该是

1:abc 2:[abc d] 3:“ abcd e” 4:测试

1:abc 2:[abc d] 3:“-” 4:测试

但不是:

1:abc 2:[abc 3:d] 4:“ abcd 5:e” 4:测试

1 个答案:

答案 0 :(得分:1)

如果您有GNU awk,则可以使用FPAT

$ awk '
BEGIN {
    FPAT="([^ ]+)|([[][^][]+[]])|(\"[^\"]+\")"
}
{
    print $3
}' file
"abcd e"
"-"

此示例将其视为字段:

  • 用空格[^ ]+分隔的字符串
  • 用方括号[[][^][]+[]]括起来的字符串
  • 用双引号"[^\"]+\"
  • 括起来的字符串

我没有测试如果封闭在其他东西中会发生什么。如果这样做,请报告。