让我们考虑下面的表
#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