Awk:如何获得一个领域的一部分?

时间:2013-10-10 06:58:57

标签: awk

我收到了这些数据:

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

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

...

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

5 个答案:

答案 0 :(得分:9)

获取部分字段的一般方法是使用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

选择哪种方法更符合您的数据。

答案 1 :(得分:6)

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

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

它产生:

234
231

答案 2 :(得分:3)

这很简单。你试过吗

awk -F'[: ]' '{print $4}' inputfile

答案 3 :(得分:3)

我会用这个:

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

为什么呢?不容易看出它的空间或标签是否分隔了字段。在awk中使用FS的默认设置是任何空白,因此即使其选项卡或空格也可以使用。然后我们从第二个字段中取出我们需要的部分,使用:

分割

答案 4 :(得分:1)

你可以使用这样的东西

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

假设您的列始终为2th,列数为3