이런 파일이 있습니다.
chr1 14969 14830 2 100(26) 100(31) 100(46) 100(13) 100(26) 100(30) 100(31) 100(36) 100(38)
chr1 15795 15039 2 100(3) 100(4) 100(4) 100(3) 100(6) 100(4) 100(2) 100(6) 100(6)
chr1 16606 15948 2 80(4) *(0) *(0) 100(1) 75(3) 100(3) 66.67(2) 100(3) *(0)
chr1 16606 16311 2 20(1) *(0) *(0) *(0) 25(1) *(0) 33.33(1) *(0) 100(1)
chr1 16853 16766 2 *(0) *(0) *(0) *(0) *(0) *(0) 100(1) *(0) 100(2)
chr1 16857 16766 2 100(2) 100(5) 100(5) 100(1) 100(2) 100(2) 100(2) 100(4) 100(2)
chr1 17232 17056 2 100(2) 100(4) 100(8) 100(2) 100(2) 100(7) 100(6) 100(5) 100(3)
chr1 17525 17369 2 *(0) *(0) 100(2) *(0) *(0) *(0) *(0) *(0) *(0)
chr1 17605 17056 1 50(9) 38.89(7) 57.89(11) 30(3) *(0) *(0) 40.74(11) 65.52(19) 57.14(16)
chr1 17605 17369 1 50(9) 61.11(11) 42.11(8) 70(7) 100(3) 100(8) 59.26(16) 34.48(10) 42.86(12)
열 3을 열 2로 바꾸고, 열 4가 2이면 -로 바꾸고, 그렇지 않으면 +로 바꿉니다. 출력은 아래와 같아야 합니다.
나는 이것을 awk에서하고 싶다. 나는 이것을 사용하여 열을 교환하려고 합니다. 또한 출력의 헤더 행을 그대로 유지하고 싶습니다.
awk -F '\t' -v OFS="\t" 'NR > 1{a=$2; $2=$3; $3=a;} 1' file
4열이 1인지 2인지에 따라 + 및 -로 변경한 다음 4열 이후에 원하는 만큼의 열을 인쇄하려면 어떻게 해야 합니까?
산출
chr1 14969 14830 - 100(26) 100(31) 100(46) 100(13) 100(26) 100(30) 100(31) 100(36) 100(38)
chr1 15795 15039 - 100(3) 100(4) 100(4) 100(3) 100(6) 100(4) 100(2) 100(6) 100(6)
chr1 16606 15948 - 80(4) *(0) *(0) 100(1) 75(3) 100(3) 66.67(2) 100(3) *(0)
chr1 16606 16311 - 20(1) *(0) *(0) *(0) 25(1) *(0) 33.33(1) *(0) 100(1)
chr1 16853 16766 - *(0) *(0) *(0) *(0) *(0) *(0) 100(1) *(0) 100(2)
chr1 16857 16766 - 100(2) 100(5) 100(5) 100(1) 100(2) 100(2) 100(2) 100(4) 100(2)
chr1 17232 17056 - 100(2) 100(4) 100(8) 100(2) 100(2) 100(7) 100(6) 100(5) 100(3)
chr1 17525 17369 - *(0) *(0) 100(2) *(0) *(0) *(0) *(0) *(0) *(0)
chr1 17605 17056 + 50(9) 38.89(7) 57.89(11) 30(3) *(0) *(0) 40.74(11) 65.52(19) 57.14(16)
chr1 17605 17369 + 50(9) 61.11(11) 42.11(8) 70(7) 100(3) 100(8) 59.26(16) 34.48(10) 42.86(12)
감사해요
답변1
awk
예를 들어 다음 스크립트 이름을 사용합니다 script.awk
.
{
temp=$2
$2=$3
$3=temp
if ( $4 == 2 ) {
$4="-"
} else {
$4="+"
}
print
temp=''
}
다음은 귀하의 요구 사항을 충족하는 것 같습니다.
$ awk -F '\t' -v OFS='\t' -f script.awk input