Regex awk中的多场分离器
我有这根绳子Regex awk中的多场分离器,regex,string,awk,Regex,String,Awk,我有这根绳子 -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 解释 foo | bar | base是一个正则表达式,它可
-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
解释
是一个正则表达式,它可以匹配由foo | bar | base
分隔的任何字符串|
- 在
中,我们可以选择匹配文字}+{+}
至少一个:}
,或文字+
至少一个:{
或空格+
- 您也可以使用一类字符来执行相同的操作:
,两者都可以[{}]
- 带awk的单向:
awk -F'[{} ]' '{ for( i=1; i<=NF; i++ ) if( $i ~ /[0-9.]+/ ) print $i }' file
如果只想在新行上显示每个数字,只需使用
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 }'
tr-d'{}file.txt | awk'{for(i=2;i您正在寻找一个regexp?类似于\d+\。\d+
?是的,但我知道\d+不能与awkthanks sputnick一起工作。ypu能解释一下吗}+|{+| ' seperator@stArdustͲ我想用冒号或空格作为分隔符,但是,似乎awk-F':|'不起作用。我遗漏了什么吗?谢谢。我找到了答案:awk-F':[\t]*.[\t]+'。感谢此链接:
$ 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
tr -d '{}' file.txt | awk '{ for( i=2; i<=NF; i++ ) print $i }'