使用awk获取字段的数字子字符串

时间:2014-08-26 19:04:43

标签: awk text-processing

我想知道如何在文本文件中使用awk获取字段的数字子字符串,如下所示。我已经熟悉substr()函数了。但是,由于字段长度不固定,我不知道如何将文本与数字部分分开。

A.TXT

"Asd.1"
"bcdujcd.2"
"mshde.3333"
"deuhdue.777"

P.S。所有数字都与文本部分分开,并带有一个点(。)。

3 个答案:

答案 0 :(得分:1)

您可以尝试这样:

rt$ echo "bcdujcd.2"|awk -F'[^0-9]*' '$0=$2' 

答案 1 :(得分:1)

如果您不关心线路的任何非数字部分,只想将数字部分视为输出,您可以使用:

awk '{gsub(/[^[:digit:]]+/, " ")}7' A.txt

将生成:

 1
 2
 3333
 777

作为输出(记录的每一行都有一个前导空格)。

如果每行只能有一个数字字段,则""中的" "代替gsub,而前导空格将会消失。如果它们出现在一条线上,则用空格替换将使多个数字字段由空格分隔。 (即"foo.88.bar.11"变为88 11而不是8811)。

如果您只需要该行中每行的第二个(句点分隔)字段,那么awk -F. '{print $2}'将会这样做。

答案 2 :(得分:1)

$ awk -F'[".]' '{print $3}' file
1
2
3333
777