首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用特定列集的awk或sed更改字段分隔符

使用特定列集的awk或sed更改字段分隔符
EN

Stack Overflow用户
提问于 2020-11-05 11:42:20
回答 2查看 203关注 0票数 0

我想修改一个文件,其中制表符和空格都用作字段分隔符。在开始时,我们有一个具有这种结构的文件:

代码语言:javascript
复制
 chr1    Cufflinks    gene_id "XLOC_000001"; oId "XR_003076322.1";
 chr1    Cufflinks    gene_id "XLOC_000012"; oId "XR_001548508";

执行awk -F' ' '$4=$6 {print $0}'执行我正在寻找的内容(将"gene_id“的值更改为”oId“中的值):

代码语言:javascript
复制
 chr1 Cufflinks gene_id "XR_003076322.1"; oId "XR_003076322.1";
 chr1 Cufflinks gene_id "XR_001548508"; oId "XR_001548508";

问题在于它改变了行结构:chr1Cufflinksgene_id之间的选项卡Cufflinks消失了。我尝试添加-v OFS=\t,但是它在gene_id "XLOC_000012"; oId "XR_001548508";部件中放置制表符(应该用空格分隔)。我也尝试过使用sed,类似于sed -i 's/ /\t/',但它也将标签放在任何地方。

如何将第1列的字段分隔符更改为3(而不将第3列更改为6)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-05 16:30:52

使用awk的可能性:

代码语言:javascript
复制
awk -F '[ ]' '{$2 = $4; print}' file

通过使用输入字段分隔符的空格字符(相对于空格和制表符),可以将字段分配给它,而无需将制表符字符更改为空格。

对于更复杂的情况,有split (但没有"join"):

代码语言:javascript
复制
awk 'BEGIN {FS=OFS="\t"} {n = split($3, a, " "); a[2] = a[4]; for (i=1; i<=n; ++i)
    $3 = (i == 1 ? "" : $3 " ") a[i]
} 1' file
票数 1
EN

Stack Overflow用户

发布于 2020-11-05 11:56:55

您可以使用保留空白空间的sed

代码语言:javascript
复制
sed -E $'s/^([ \t]*([^ \t]+[ \t]+){3})[^ \t]+([ \t]+)(([^ \t]+[ \t]+){1})([^ \t]+)/\\1\\6\\3\\4\\6/' ff
代码语言:javascript
复制
chr1    Cufflinks    gene_id "XR_003076322.1"; oId "XR_003076322.1";
chr1    Cufflinks    gene_id "XR_001548508"; oId "XR_001548508";

关于将第6个字段复制到第4个字段的说明:

  • ^:#匹配start
  • ([ \t]*([^ \t]+[ \t]+){3}):#匹配前4-1字段,捕获组#1
  • [^ \t]+:#匹配第4 field
  • ([ \t]+):#匹配空格后的第4字段,在组#3
  • (([^ \t]+[ \t]+){1}):#匹配下一步(6-4-1)字段和在组#4
  • ([^ \t]+):#匹配第6字段中捕获,在组#6
  • \\1\\6\\3\\4\\6:位置捕获返回substitution

中的引用

或者,此awk还创建一个表格对齐输出:

代码语言:javascript
复制
awk '$4=$6' file | column -t

chr1  Cufflinks  gene_id  "XR_003076322.1";  oId  "XR_003076322.1";
chr1  Cufflinks  gene_id  "XR_001548508";    oId  "XR_001548508";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64696479

复制
相关文章

相似问题

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