获取表中每列中特定符号后的值

  • 本文关键字:符号 获取 awk sed extract cut
  • 更新时间 :
  • 英文 :


让我们考虑下面的表

#frame    x1:1    y1:5    z2:3    m1:13    n3:35
1         130.31  23.2    44.1    32.7     54.3
....
....

我想获得每列中冒号(:)符号之后的值。因此,结果将是第2列1,第3列5,第4列3,第5列13,第6列35。例如,输出将看起来像

1 5 3 13 35

我将按照以下方式使用GNUAWK,让file.txt内容为

#frame    x1:1    y1:5    z2:3    m1:13    n3:35
1         130.31  23.2    44.1    32.7     54.3
....
....

然后

awk 'BEGIN{FPAT=":[^[:space:]]+"}NF{for(i=1;i<=NF;i+=1){$i=substr($i,2)};print}' file.txt

给输出

1 5 3 13 35

解释:我通过FPAT变量通知GNUAWK,它应该考虑:后面跟着1个或多个(+)非(^) -空格([:space:])为列。然后,对于具有任何列(NF)的每行,我使用for循环迭代这些列,并将其内容替换为从第2个字符开始的值的内容,即我丢弃前导:,当这样做时,我print行(由空格字符剪切的列的内容)

(在gawk 4.2.1中测试)

这可能适合您(GNU sed):

sed -En 's/S+://gp' file

删除所有后跟冒号的非空白字符,仅在存在匹配时全局打印结果。

或者如果您只想要:之后的值,那么:

sed -En '/:/{s/[^:]*//;s/S*://gp}' file

相关内容

  • 没有找到相关文章

最新更新