3

我得到了这个数据:

aaa:123 bbb:**234** ccc:345

eee:435 ddd:**231** xxx:897

...

如何使用 Awk 获得粗体部分?

4

5 回答 5

14

获取部分字段的一般方法是使用split

awk -F':' '{ split($3, subfield, " "); print subfield[1] }'

其他人提到使用正则表达式将空格和冒号都视为字段分隔符。这很好,只要空格的数量是可预测的。但否则它将失败,例如,对于这样的输入:

aaa:123 bbb:234 ccc:345
eee:435 ddd:231 xxx:897
fff:214 ads 23423 fds:183 eee:234

选择与您的数据更匹配的方法。

于 2013-10-10T07:53:01.130 回答
6

使用空格加上冒号和计数字段的正则表达式:

awk -F'[[:blank:]:]+' '{ print $4 }' infile

它产生:

234
231
于 2013-10-10T07:04:01.657 回答
4

I would have used this:

awk '{split($2,a,":");print a[2]}' file

Why? Its not easy to see if its space or tab that separates the filed. Using default setting of FS in awk is any blank, so it will work even if its tab or spaces. Then we from second field take out part we need, using split by :

于 2013-10-10T08:11:13.017 回答
3

这很简单。你试过了吗

awk -F'[: ]' '{print $4}' inputfile
于 2013-10-10T07:04:20.307 回答
1

你可以使用这样的东西

BEGIN { FS = ":" }
{  
   split($(NF-1),a," ");
   $2=a[2]; 
   print $2;   
}

假设您的列始终是2th并且列数是3

于 2013-10-10T07:43:54.043 回答