이런 파일이 있어요
gene - chr7 55675 55676 100 100
gene - chr7 55678 55679 100 100
gene - chr7 55683 55686 NP 100
파일은 탭으로 구분됩니다.
열 5가 열 4에 있고 열 4가 열 5에 있도록 파일을 변경한 다음 모든 열을 그대로 인쇄하고 싶습니다. 5열 이후에 2개의 열만 표시했지만 더 있을 수도 있습니다.
나는 그것을 시도했지만 cut -f 1,2,3,5,4,6-
작동하지 않습니다.
나는 awk 솔루션을 선호합니다.
감사해요
답변1
필드 4와 5를 바꿉니다.
$ awk -F'\t' '{a=$4; $4=$5; $5=a;} 1' OFS='\t' file
gene - chr7 55676 55675 100 100
gene - chr7 55679 55678 100 100
gene - chr7 55686 55683 NP 100
작동 방식:
-F'\t'
그러면 탭 입력에 필드 구분 기호가 설정됩니다.
a=$4; $4=$5; $5=a
이렇게 하면 네 번째와 다섯 번째 필드가 바뀌게 됩니다.
1
이것은 print-the-line에 대한 awk의 신비한 속기입니다.
OFS='\t'
이는 awk에게 탭을 출력의 필드 구분 기호로 사용하도록 지시합니다.
제목은 그대로 유지하세요
첫 번째 행을 제외한 모든 행의 필드를 바꾸려면 다음을 수행하세요.
awk -F'\t' -v OFS='\t' 'NR>1{a=$4; $4=$5; $5=a;} 1' file
NR
줄 번호입니다. NR>1
교환 명령 앞에는 조건이 있습니다 . swap 명령은 조건이 true인 경우에만 실행됩니다.
대체 스타일
일부 스타일리스트는 코드 앞에 OFS 할당을 권장합니다.
awk -F'\t' -v OFS='\t' '{a=$4; $4=$5; $5=a;} 1' file