我有这个字符串
-foo {{0.000 0.000} {648.0 0.000} {648.0 1980.0} {0.000 1980.0} {0.000 0.000}}
我想将它分成数字并对它们进行迭代处理,谢谢。我尝试使用字段分隔符但没有成功,如何使用awk实现?试着这样做:
awk -F'}+|{+| ' '{for (i=1; i<=NF; i++) if ($i ~ "[0-9]") print $i}' file.txt
字段分隔符FS
(使用-F
开关)可以是字符、单词、正则表达式或一类字符。
您也可以使用这个:
awk 'BEGIN{FS="}+|{+| "} {for(i=1;i<=NF;i++) if($i ~ "[0-9]")print $i}' file.txt
foo|bar|base
是一个正则表达式,它可以匹配由 |
分隔的任何字符串。}+|{+|
中,我们可以选择匹配至少一个字面量 }
:+
,或者至少一个字面量 {
:+
,或者一个空格。[{} ]
,两种方法都可以。awk -F'[{} ]' '{ for( i=1; i<=NF; i++ ) if( $i ~ /[0-9.]+/ ) print $i }' file
0.000
0.000
648.0
0.000
648.0
1980.0
0.000
1980.0
0.000
0.000
grep
:$ egrep -o '[0-9]+\.[0-9]+' file
0.000
0.000
648.0
0.000
648.0
1980.0
0.000
1980.0
0.000
0.000
诚然,我在我的建议中非常简单。根据我的经验,学习字段分隔符的正则表达式示例是最有价值的,特别是如果您必须处理XML等内容。但在这种情况下,我们必须记住,当遇到无关字符时,UNIX会给您提供许多替代方案。一个简单的解决方法是只需删除不需要的字符。有各种方法,但我会使用tr -d '{}'
,如下所示:
tr -d '{}' file.txt | awk '{ for( i=2; i<=NF; i++ ) print $i }'
将循环计数器 i
设为2只是一个快速跳过第一个参数(-foo
)的方法。
\d+\.\d+
这样的吗? - sp00m