Linux
根據來自另一列的指令更改列中的字元
我正在嘗試設置一個腳本,該腳本將根據我在 NGS 數據中找到的變體將密碼子序列轉換為另一個密碼子序列。
目前,我的腳本創建一個製表符分隔的輸出文件,有 6 列。每列代表以下內容:
- 第一:基因組位置
- 第二:核苷酸鹼基
- 第三:密碼子
- 第四:密碼子中的基因組位置順序
- 5th:SNP頻率
- 第六名:SNP基地
輸出數據如下所示:
2289 G GTG 3 0.0346505 A 2478 G ATG 2 0.0054087 C
是否可以在輸出文件中設置第 7 列,根據第 4 列中的數字將密碼子的核苷酸序列更改為 SNP 核苷酸(第 6 列)?
例如,
- 對於基因組位置 2289:
密碼子 GTG 將變為 GTA。SNP 核苷酸 A 替換密碼子中的第 3 個核苷酸序列,密碼子序列順序在第 4 列中指定。
- 對於基因組位置 2478
密碼子 ATG 將變為 ACG。SNP 核苷酸 C 取代了密碼子中的第二個核苷酸序列。
是否可以使用
awk
或sed
執行此操作?
對“是否有可能……”這個問題只回答“是”是如此誘人。
這樣的事情會做嗎?
awk '{l=substr($3,1,$4-1); r=substr($3,$4+1); print $0"\t"l $6 r}' genome > mutated
處理字元串中允許的位置:
awk -F"\t" '{printf $0 "\t"; if ($4 > 1) { printf substr($3, 1, $4 - 1) }; printf $6; if ($4 < length($3)) { printf substr($3, $4 + 1) }; printf "\n"}'
或者也許更容易理解:
awk -F"\t" 'BEGIN { OFS = FS } { if ($4 > 1) { mod = substr($3, 1, $4 - 1) }; mod = mod $6; if ($4 < length($3)) { mod = mod substr($3, $4 + 1) }; print $0, mod }'
而且由於
substr
似乎不太關心邊界:awk -F"\t" 'BEGIN { OFS = FS } { mod = substr($3, 1, $4 - 1) $6 substr($3, $4 + 1); print $0, mod }'