입력(탭으로 구분)
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 +