awk - 复制、重新排列和添加列到文件

awk - Duplicate, Rearrange and Add columns to file

我愿意:

  1. 重复 2 列

  2. 在列之间切换位置

  3. 在文件末尾的一列中添加一个变量(如:0,128,128)

我的档案:

chr1    3006607 3006623 Class   0   +
chr1    3006607 3006623 Class   0   +
chr1    3006607 3006623 Class   0   +
chr1    3006607 3006623 Class   0   +
chr1    3006607 3006623 Class   0   +
....continue

我的代码:

cat FILE.txt | awk 'BEGIN { FS=" "; OFS="\t" } { print , = "\t" , = "\t" , , ,  }' | awk 'BEGIN { FS="\t"; OFS="\t" } { print , , , , , , ,  "\t" "0,128,128" }' > FILE.bed

我的输出:

chr1    3006607 3006623 Class   0   +
        3006607 3006623 0,128,128
chr1    3006607 3006623 Class   0   +
        3006607 3006623 0,128,128
chr1    3006607 3006623 Class   0   +
        3006607 3006623 0,128,128
chr1    3006607 3006623 Class   0   +
        3006607 3006623 0,128,128
chr1    3006607 3006623 Class   0   +
        3006607 3006623 0,128,128
...continue

错误 = 重复的列和添加的列在下面的一行中

我想得到什么!

chr1    3006607 3006623 Class   0   +  3006607  3006623   0,128,128
chr1    3006607 3006623 Class   0   +  3006607  3006623   0,128,128
chr1    3006607 3006623 Class   0   +  3006607  3006623   0,128,128
chr1    3006607 3006623 Class   0   +  3006607  3006623   0,128,128
chr1    3006607 3006623 Class   0   +  3006607  3006623   0,128,128
.....continue

我做错了什么? 我缺少 NR 还是 paste0?

如果您问题中的代码产生的输出将重复的值放在新行中,那么您的输入有 DOS 行结尾(或类似的?)导致这种情况发生,因为您的代码不会 那样做。

请参阅 了解如何处理 DOS 行尾,这就是您真正需要的,而不是问题中的脚本:

$ awk -v OFS='\t' '{print [=10=], , , "0,128,128"}' file
chr1    3006607 3006623 Class   0   +   3006607 3006623 0,128,128
chr1    3006607 3006623 Class   0   +   3006607 3006623 0,128,128
chr1    3006607 3006623 Class   0   +   3006607 3006623 0,128,128
chr1    3006607 3006623 Class   0   +   3006607 3006623 0,128,128
chr1    3006607 3006623 Class   0   +   3006607 3006623 0,128,128

您可以使用:

awk -v OFS='\t' -v s='0,128,128' '{=; print [=10=], , , s}' file

chr1    3006607 3006623 Class   0   +   3006607 3006623 0,128,128
chr1    3006607 3006623 Class   0   +   3006607 3006623 0,128,128
chr1    3006607 3006623 Class   0   +   3006607 3006623 0,128,128
chr1    3006607 3006623 Class   0   +   3006607 3006623 0,128,128
chr1    3006607 3006623 Class   0   +   3006607 3006623 0,128,128

= 是强制 [=12=] 以制表符作为字段分隔符重新格式化。