首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用awk子串

使用awk子串
EN

Stack Overflow用户
提问于 2012-07-03 23:30:01
回答 1查看 543关注 0票数 2

我有这样几行代码的文件:

代码语言:javascript
复制
1       17      A       G       R:560:500:60:10.71%:1.6329E-19  Pass:1.0:276:0:57:0:1E0 15      17      0       0       R:24:20:4:16.67%:5.461E-2 R:22:20:2:9.09%:2.4419E-1 R:27:24:3:11.11%:1.1792E-1 R:26:23:3:11.54%:1.1765E-1 A:16:16:0:0%:1E0 A:23:23:0:0%:1E0 A:11:10:1:9.09%:5E-1
1       36      C       T       Y:560:499:61:10.89%:7.7026E-20  Pass:1.0:275:0:58:0:1E0 15      17      0       0       Y:24:20:4:16.67%:5.461E-2 Y:22:20:2:9.09%:2.4419E-1 Y:27:24:3:11.11%:1.1792E-1 Y:26:23:3:11.54%:1.1765E-1 C:16:16:0:0%:1E0 C:23:23:0:0%:1E0 C:11:10:1:9.09%:5E-1 

我之前在liner上使用了下面的awk,从$11开始提取每个字段的第一个字符。

代码语言:javascript
复制
awk '{n=11; while (n<18) {{$n = substr($n, 0, 1)} n++} print $0}'

我正在寻找一种简单的方法来修改它,这样我就可以只从这些字段中提取百分比(字段的第四个冒号之后的值)。输出将如下所示:

代码语言:javascript
复制
1       17      A       G       R:560:500:60:10.71%:1.6329E-19  Pass:1.0:276:0:57:0:1E0 15      17      0       0       16.67% 9.09% 11.11% 11.54% 0% 0% 9.09%
1       36      C       T       Y:560:499:61:10.89%:7.7026E-20  Pass:1.0:275:0:58:0:1E0 15      17      0       0       16.67% 9.09% 11.11% 11.54% 0% 0% 9.09%   

干杯。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-03 23:36:21

这将打印包含“%”的百分比:

代码语言:javascript
复制
split($5, arr, ":"); print arr[5]

调整split()语句中的字段编号以适合您的数据。

您不需要使用while循环并自己管理增量变量,只需使用for循环即可。下面是一个完整的工作脚本,使用了上面显示的技术和一个for循环:

代码语言:javascript
复制
awk 'BEGIN {OFS = "\t"} {for (n = 11; n < 18; n++) {split($n, arr, ":"); $n = arr[5]}; print $0}'

示例输出:

代码语言:javascript
复制
1   17  A   G   R:560:500:60:10.71%:1.6329E-19  Pass:1.0:276:0:57:0:1E0 15  17  0   0   16.67%  9.09%   11.11%  11.54%  0%  0%  9.09%
1   36  C   T   Y:560:499:61:10.89%:7.7026E-20  Pass:1.0:275:0:58:0:1E0 15  17  0   0   16.67%  9.09%   11.11%  11.54%  0%  0%  9.09%
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11314271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档