awk使用逗号(可选),后跟多个空格作为FS

时间:2010-01-04 21:29:41

标签: awk nawk

我需要做的是解析以下形式的字符串

-option optionArgument, - alternativeNotation一些文字,没什么兴趣......

我将FS设置为

BEGIN {
    FS = ",?\ +" 
}

但它没有用......它应该在每个随机数量的空格(至少一个)上打破,前面有一个逗号(可选)。有什么想法吗?

提前,

奥利弗

3 个答案:

答案 0 :(得分:1)

FS =“[,] * [] +”

这使得逗号可选,但不是空格。这会在每个-option和optionArg中创建一个单独的字段,这是我认为你想要的。

awk 'BEGIN {FS = "[,]*[ ]+";} { print $1; print $2; print $3; print $4; print $5;}' << EOF
> -option1 hello, --option2 world, -option3
> EOF
-option1
hello
--option2
world
-option3

答案 1 :(得分:1)

您的FS执行了您在问题中描述的内容,但根据shell引用,空格前的反斜杠可能是多余的:

$ echo '-option optionArgument, --alternativeNotation Some text, nothing of interest...' |  \
  nawk 'BEGIN {
          FS=",? +";
          OFS="][";
        }
        {
          print "["$1,$2,$3,$4"]";
          print "["$5,$6,$7,$8"]";
        }'
[-option][optionArgument][--alternativeNotation][Some]
[text][nothing][of][interest...]

你想要这些字段是什么?

答案 2 :(得分:0)

@OP,下次尝试描述你的最终输出是什么。

echo "-option1 hello,          --option2 world, -option3" | awk 'BEGIN{FS=",[ ]+"}
{
    for(i=1;i<=NF;i++){
        print $i
    }
}
'

输出

$ ./shell.sh
-option1 hello
--option2 world
-option3

此外,实际上不需要检查多个空格。只需使用逗号作为分隔符,稍后修剪剩余的空格。

echo "-option1 hello,          --option2 world, -option3" | awk 'BEGIN{FS=","}
{
    for(i=1;i<=NF;i++){
        gsub(/^ +| +$/,"",$i)
        print $i
    }
}
'

输出

$ ./shell.sh
-option1 hello
--option2 world
-option3