awk는 특정 열부터 끝까지 인쇄하는 데 도움이 됩니다.

awk는 특정 열부터 끝까지 인쇄하는 데 도움이 됩니다.

이런 파일이 있어요

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

관련 정보