【发布时间】:2020-11-05 11:42:20
【问题描述】:
我想修改一个同时使用制表符和空格作为字段分隔符的文件。 一开始我们有一个具有这种结构的文件:
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”中的值):
chr1 Cufflinks gene_id "XR_003076322.1"; oId "XR_003076322.1";
chr1 Cufflinks gene_id "XR_001548508"; oId "XR_001548508";
问题在于它改变了行结构:chr1、Cufflinks 和 gene_id 之间的标签 \t 消失了。我尝试添加-v OFS=\t,但它会将制表符放在gene_id "XLOC_000012"; oId "XR_001548508"; 部分(应该用空格分隔)。我也尝试过使用sed 类似sed -i 's/ /\t/' 的东西,但它也到处都是标签。
如何将第 1 列的字段分隔符更改为第 3 列(并且不要将第 3 列更改为第 6 列)?
【问题讨论】:
-
您的条件
$4=$6实际上不是一个条件,=是一个赋值运算符,所以您要比较 $4 和 $6 吗?或者您想将第 4 个字段值指定为第 6 个字段?请确认一次。 -
不,这不是条件,这是故意的。我需要将 $6 的值分配给 $4