Awk:如何获得场地的一部分?

Awk:如何获得场地的一部分?,awk,Awk,我得到了以下数据: aaa:123 bbb:**234** ccc:345 eee:435 ddd:**231** xxx:897 ... 如何使用Awk获取粗体部分?使用空格加冒号和计数字段的正则表达式: awk -F'[[:blank:]:]+' '{ print $4 }' infile 它产生: 234 231 这相当简单。你试过了吗 awk -F'[: ]' '{print $4}' inputfile 你可以用这样的东西 BEGIN { FS = ":" } {

我得到了以下数据:

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

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

...

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

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

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

234
231

这相当简单。你试过了吗

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

你可以用这样的东西

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

假设您的列始终是
2
,列数是
3

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

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

我会使用以下方法:

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

为什么??不容易看出它的空格或分隔字段的制表符。在awk中使用FS的默认设置为任意空白,因此即使其制表符或空格为空,它也可以工作。然后我们从第二个字段中取出我们需要的部分,使用split by

返回“123 bbb”和“435 ddd”,而不是OP要求的。所有解决方案都假定一些格式,如果一行包含
fff:214 ads:23423 fds:183 eee:234,他喜欢这一行的
183
。我不明白你的意思。是的,需要一种格式,这很简单。是的,数据格式模棱两可,所以所有答案都有猜测。那又怎么样?你为什么认为这是一个任意的假设,关于哪个领域是需要任何利益?我和你一样假设,这只是一个评论。OP发布尽可能多的数据总是好的。@Jotne那么只是想强调策略需要与数据匹配这一点吗?好啊我想关键字应该是“subfields”而不是“subfield”ref:我使用
substr
函数来解决这个问题