-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 に答える