次のようにタブ区切りのファイルがあります。
cg13201342 F ARNT;ARNT;ARNT;CTSK 3'UTR;3'UTR;3'UTR;TSS1500
cg05269359 F SCN4B;SCN4B;SCN4B;SCN4B 3'UTR;3'UTR;3'UTR;Body
cg06018296 R NEK3;NEK3;NEK3;NEK3 3'UTR;3'UTR;3'UTR;Body
cg05172994 F WDR20;WDR20;WDR20;WDR20 3'UTR;3'UTR;3'UTR;Body
希望の出力:
cg13201342 F ARNT 3'UTR
cg13201342 F ARNT 3'UTR
cg13201342 F ARNT 3'UTR
cg13201342 F CTSK TSS1500
cg05269359 F SCN4B 3'UTR
.
.
など。
頑張った
awk 'BEGIN {
FS = OFS = "\t"
}
{
n = split($3, f, " *;*")
for (i=1; i<=n; i++)
print $1, f[i]
}' probe-genes-regions >chk
ただし、これは3番目の列のみを分割します。最後の列を2番目の列から分離し、3番目の列の最初のフィールドと最後の列の1番目のフィールドなどで別々の行を形成したいと思います。
ベストアンサー1
たとえば、フィールド3と4をセミコロンを使用して別々の配列に分割して繰り返します(フィールド3と4の要素数が同じであると仮定)。
解析.awk
BEGIN { OFS = "\t" }
{
n = split($3, a, /;/); split($4, b, /;/)
for(i=1; i<=n; i++)
print $1, $2, a[i], b[i]
}
次のように実行します。
awk -f parse.awk infile
出力:
cg13201342 F ARNT 3'UTR
cg13201342 F ARNT 3'UTR
cg13201342 F ARNT 3'UTR
cg13201342 F CTSK TSS1500
cg05269359 F SCN4B 3'UTR
cg05269359 F SCN4B 3'UTR
cg05269359 F SCN4B 3'UTR
cg05269359 F SCN4B Body
cg06018296 R NEK3 3'UTR
cg06018296 R NEK3 3'UTR
cg06018296 R NEK3 3'UTR
cg06018296 R NEK3 Body
cg05172994 F WDR20 3'UTR
cg05172994 F WDR20 3'UTR
cg05172994 F WDR20 3'UTR
cg05172994 F WDR20 Body