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

awk使用逗号(可选)后跟多个空格作为FS,awk,nawk,Awk,Nawk,我需要做的是解析以下形式的字符串 -option option Argument,--可选符号一些文本,不感兴趣 我将FS设置为 BEGIN { FS = ",?\ +" } 但它不起作用。。。它应该在每个随机数的空格(至少一个)上断开,前面加逗号(可选)。有什么想法吗 Thx提前 奥利弗 这使得逗号是可选的,而不是空格。这将在每个选项和optionArg中创建一个单独的字段,我相信这是您想要的 awk 'BEGIN {FS = "[,]*[ ]+";} { print $1; pr

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

-option option Argument,--可选符号一些文本,不感兴趣

我将FS设置为

BEGIN {
    FS = ",?\ +" 
}
但它不起作用。。。它应该在每个随机数的空格(至少一个)上断开,前面加逗号(可选)。有什么想法吗

Thx提前

奥利弗

这使得逗号是可选的,而不是空格。这将在每个选项和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
awk'BEGIN{FS=“[,]*[]+”;}{print$1;print$2;print$3;print$4;print$5;}'-option1 hello,--option2 world,-option3
>EOF
-选择1
你好
--选择2
世界
-选择3

您的
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...]

您希望字段是什么?

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

echo "-option1 hello,          --option2 world, -option3" | awk 'BEGIN{FS=",[ ]+"}
{
    for(i=1;i<=NF;i++){
        print $i
    }
}
'
此外,实际上不需要检查多个空格。只需使用逗号作为分隔符,然后修剪剩余的空格

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

你说的“没用”是什么意思?你们得到了什么样的结果,和你们期望的有什么不同?“随机”并不意味着“任意”不正确。不管有没有字符类,特罗尔霍恩的模式在语义上是等价的。
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