awk - 复制、重新排列和添加列到文件
awk - Duplicate, Rearrange and Add columns to file
我愿意:
重复 2 列
在列之间切换位置
在文件末尾的一列中添加一个变量(如: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=]
以制表符作为字段分隔符重新格式化。
我愿意:
重复 2 列
在列之间切换位置
在文件末尾的一列中添加一个变量(如: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 行结尾(或类似的?)导致这种情况发生,因为您的代码不会 那样做。
请参阅
$ 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=]
以制表符作为字段分隔符重新格式化。