首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在检测到图案后,将一列转到一行

在检测到图案后,将一列转到一行
EN

Stack Overflow用户
提问于 2014-07-18 14:51:43
回答 2查看 89关注 0票数 0

我有以下文本文件格式:

代码语言:javascript
复制
01  contig00041 1   878 +   YP_003990830.1  metalloendopeptidase, glycoprotease family  Geobacillus sp. Y4.1MC1 100.00  291 1   291 47  337 0.0 592 #line 1
01  contig00041 1241    3117    -   YP_002948419.1  ABC transporter Geobacillus sp. WCH70   84.94 #line 2
37.31   624 #line 3
260 1 #line 4
321 624 #line 5
532 23 #line 6
12  644 #line 7
270 0.0 #line 8
3e-37   1046 #line 9
154 #line 10

我必须检测包含8列(第2行)的一行,并将下面七行(第3-9行)的第二列转到8列行的末尾。最后,排除第10行。这个模式沿着一个大文本文件重复,但并不频繁(30次,在2000行的文件中)。可以用awk来做吗?

编辑后的文本文件必须如下所示:

代码语言:javascript
复制
01  contig00041 1   878 +   YP_003990830.1  metalloendopeptidase, glycoprotease family  Geobacillus sp. Y4.1MC1 100.00  291 1   291 47  337 0.0 592 #line 1
01  contig00041 1241    3117    -   YP_002948419.1  ABC transporter Geobacillus sp. WCH70   84.94   624 1   624 23  644 0.0 1046 #line 2

先谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-18 15:33:29

编辑了,使其只添加带有两列的第二列行。

我觉得这能做你想做的事

代码语言:javascript
复制
awk 'NF >= 8 { a[++i] = $0 } NF == 2 { a[i] = a[i] " " $2 } END { for (j = 1; j <= i; ++j) print a[j] }' file

对于列超过8列的行,向数组a添加一个新元素。如果该行有2列,则将内容追加到当前数组元素中。处理完整个文件后,遍历数组并打印所有行。

输出:

代码语言:javascript
复制
01  contig00041 1   878 +   YP_003990830.1  metalloendopeptidase, glycoprotease family  Geobacillus sp. Y4.1MC1 100.00  291 1   291 47  337 0.0 592
01  contig00041 1241    3117    -   YP_002948419.1  ABC transporter Geobacillus sp. WCH70   84.94 624 1 624 23 644 0.0 1046
票数 0
EN

Stack Overflow用户

发布于 2014-07-18 15:09:59

代码语言:javascript
复制
awk 'NF == 12 { t = $0; for (i = 1; i <= 7; ++i) { r = getline; if (r < 1) break; t = t "\t" $2; } print t; next; } NF > 12' temp.txt

输出:

代码语言:javascript
复制
01  contig00041 1   878 +   YP_003990830.1  metalloendopeptidase, glycoprotease family  Geobacillus sp. Y4.1MC1 100.00  291 1   291 47  337 0.0 592
01  contig00041 1241    3117    -   YP_002948419.1  ABC transporter Geobacillus sp. WCH70   84.94       624     1       624     23      644     0.0 1046
  • 它将自动打印超过12个字段的线条。
  • 如果它检测到有12个字段的行,则将其他7行中的第二列与其连在一起并打印。
  • 忽略任何其他行。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24827914

复制
相关文章

相似问题

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