输入(制表符分隔)
HTR12 AT1G01370 Chr1 143564 145684 +
SDG42 AT1G01920 Chr1 316128 319650 +
SDG5 AT1G02580 Chr1 544783 549202 +
输出(制表符分隔)
Chr1 143564 145684 HTR12 AT1G01370 +
Chr1 316128 319650 SDG42 AT1G01920 +
Chr1 544783 549202 SDG5 AT1G02580 +
我的解决方案是
awk -v OFS="\t" '{print $3,$4,$5,$2,$1,$6}' input > output
但好像不太好。
答案1
尝试
awk -F'\t' -v OFS='\t' '{print $3,$4,$5,$1,$2,$6}' input > output
这将为两者设置 FS(字段分隔符)
-F'\t'
IFS(输入),-v OFS='\t'
OFS(输出)。
我也交换$1
和$2
我给你添加了示例文件,输出是
awk -F'\t' -v OFS='\t' '{print $3,$4,$5,$1,$2,$6}' se.txt
Chr1 143564 145684 HTR12 AT1G01370 +
Chr1 316128 319650 SDG42 AT1G01920 +
和(添加od -c
以检查选项卡)
awk -F'\t' -v OFS='\t' '{print $3,$4,$5,$1,$2,$6}' se.txt | od -c
0000000 C h r 1 \t 1 4 3 5 6 4 \t 1 4 5 6
0000020 8 4 \t H T R 1 2 \t A T 1 G 0 1 3
0000040 7 0 \t + \n C h r 1 \t 3 1 6 1 2 8
0000060 \t 3 1 9 6 5 0 \t S D G 4 2 \t A T
0000100 1 G 0 1 9 2 0 \t + \n
0000113
答案2
我使用空格作为字段分隔符并在字段之间使用制表符,我得到了完美的方向。
awk -F" " '{print $3"\t"$4"\t"$5"\t"$2"\t"$1"\t"$6}' input.txt > output.txt
输出:
Chr1 143564 145684 AT1G01370 HTR12 +
Chr1 316128 319650 AT1G01920 SDG42 +
Chr1 544783 549202 AT1G02580 SDG5 +
答案3
一个制表符等于 8 个空格,因此请尝试使用以下代码
awk '{printf "%8s%8s%8s%8s%8s%8s\n",$3,$4,$5,$1,$2,$6}' filename
Chr1 143564 145684 HTR12AT1G01370 +
Chr1 316128 319650 SDG42AT1G01920 +
Chr1 544783 549202 SDG5AT1G02580 +