2010-01-04 40 views
1

AWK使用逗号(可选),我需要做的是解析以下形式的字符串其次是多个空格作为FS

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

我设置了FS到

BEGIN { 
    FS = ",?\ +" 
} 

,但它没有工作...它应该在空白的每一个随机数(至少一个),用逗号(可选)preceeded打破。有任何想法吗?

Thx提前,

奥利弗

+0

你说的 “它不工作” 是什么意思?你得到了什么结果,这与你的预期有什么不同? – 2010-01-04 21:49:29

+0

“随机”并不意味着“任意” – 2010-01-04 23:46:25

回答

1

FS = “[,] * [] +”

这使得逗号可选的,但不占空间。这会在每个选项和选项Arg之外创建一个独立的字段,这是我相信你想要的。

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 
+0

不正确。无论有没有字符类,Trollhorn的模式在语义上都是相同的。 – 2010-01-04 22:02:12

+0

好点。我永远不会使用角色类。 – 2010-01-04 22:08:01

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

你要什么领域是?

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