-4

我的文件的第一列在大多数行中由正斜杠分隔,但不是全部。我想解析第一列,在同一个文件中创建新列。(我需要第一列中的第一个字段,所以如果有办法在同一个文件的新列中打印第一个字段,那也可以)。所有行的列数都不相同。其他列的模式更复杂。输入:

SAMD11/SAMD11    chr1    ALLELEA=T    taWT=1    TOP=+
SAMD11/SAMD11/NOC2L    chr1    ALLELEA=T    taPN=-1 
AGRN    chr1    ALLELEA=T       

期望的输出:

SAMD11  SAMD11    chr1    ALLELEA=T    taWT=1    TOP=+
SAMD11  SAMD11    NOC2L   chr1     ALLELEA=T     taPN=-1
AGRN    chr1      ALLELEA=T         

非常感谢。

4

1 回答 1

1

您可以使用斜线 ( FS = "/") 分隔字段,并设置制表符来分隔输出 ( OFS = "\t") 中的字段。$1 = $1就我而言,您必须执行任何类型的虚拟过程才能awk从一种模式转换为另一种模式。我假设第一个字段中没有其他斜线。

awk 'BEGIN { FS = "/"; OFS = "\t" } { $1 = $1; print }' infile

它产生:

SAMD11  SAMD11    chr1    ALLELEA=T    taWT=1    TOP=+
SAMD11  SAMD11  NOC2L    chr1    ALLELEA=T    taPN=-1 
AGRN    chr1    ALLELEA=T

编辑考虑到许多字段中的斜杠选项的脚本。它检查第一个字段是否有斜线并使用制表符将其删除。输出与之前相同。

awk '
  BEGIN { OFS = "\t" } 
  $1 ~ /\// { 
    gsub( /\//, "\t", $1 ) 
  } 
  { print }
' infile
于 2013-03-13T21:58:26.870 回答