在文本文件行中搜索并选择十进制数字

时间:2014-05-06 15:28:22

标签: perl awk sed numbers head

我有xml文本文件,其中包含由制表符/空格分隔的多个数字(3)的行,我想从中单独选择每组数字。

自:

<tagname1>     110.0912    99.1234     55.1326   </tagname1>

结果:

110.0912

99.1234

55.1326

我想使用sed,awk,grep等perl也很好。看似简单,但无法找到更清晰的线条。我试过了:

more FILENAME | grep tagname1 | grep -E -o "[0-9]+*\.[0-9]+" |  head -n 1

5 个答案:

答案 0 :(得分:2)

perl -MRegexp::Common -nE 's/<.*?>//g; say for /($RE{num}{real})/g' file

答案 1 :(得分:1)

您可以使用grep -o选项。

$ cat file
<tagname1>     110.0912    99.1234     55.1326   </tagname1>

$ grep -oE '\b[0-9.]+\b' file
110.0912
99.1234
55.1326
  • \b定义单词边界
  • [0-9.]+是一个字符类,建议匹配数字.一次或多次
  • -o选项仅打印匹配的模式

答案 2 :(得分:0)

您可以使用awk

awk '{print $2,$3,$4}' OFS="\n" file
110.0912
99.1234
55.1326

答案 3 :(得分:0)

awk -v which=2 '/<tagname1>(([0-9]*(\.[0-9]*)?)|[ \t])*<\/tagname1>/ {print $(which+1)}' input.txt

使用变量which选择要打印的数字,在此示例中,它将打印第二个数字which=2

input.txt中:

<tagname1>     110.0912    99.1234     55.1326   </tagname1>

答案 4 :(得分:0)

$ cat file
<tagname1>     110.0912    99.1234     55.1326   </tagname1>
$ awk -v tag="tagname1" -v nr=1 '$0~"<"tag">"{print $(nr+1)}' file
110.0912
$ awk -v tag="tagname1" -v nr=2 '$0~"<"tag">"{print $(nr+1)}' file
99.1234
$ awk -v tag="tagname1" -v nr=3 '$0~"<"tag">"{print $(nr+1)}' file
55.1326