Awk处理文本如何打印所有列并追加修改后的列值
原命令的问题
你写的awk命令有两个明显错误:
- 全局字段分隔符设置错误:用
-F '[:]'指定分隔符为冒号后,整行会被按冒号切分,原本按制表符分割的前三列、完整第四列的字段结构被打乱,无法直接调取原始的前三个列和完整第四列的值。 - 输出内容缺失原始字段:print语句只拼接输出了新生成的坐标片段,完全没有打印原始行的内容,自然不会带上原有的四列数据。
修正后的命令
不需要修改全局的字段分隔符,保持awk默认按空白(空格、制表符)切分列的规则,只单独对第四列做拆分处理即可,执行以下命令就能得到预期结果:
awk '{split($4, arr, ":"); new_col = arr[1] ":" arr[2]-1 "-" arr[2]; print $0 "\t" new_col}' test
命令逻辑说明
split($4, arr, ":"):单独把第四列按冒号拆分,拆分结果存入数组arr,arr[1]是第四列里的染色体名(如Chr1),arr[2]是第四列冒号后的坐标数值$0代表当前行的全部原始内容,打印完原始内容后输出制表符做分隔,再跟上拼接好的新列,输出格式和预期结果完全匹配。
内容的提问来源于stack exchange,提问作者Achal Neupane
相关产品推荐
相关产品推荐

