Text-Processing
使用 shell 根據分隔符將多列拆分為行
我有一個製表符分隔的文件,如下所示:
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 和 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