awk: 반복 횟수와 수량을 오름차순으로 계산합니다.

awk: 반복 횟수와 수량을 오름차순으로 계산합니다.

awk에서는 탭으로 구분된 파일에서 중복된 값을 세고 오름차순으로 번호를 다시 매겨야 합니다.

3열의 행을 비교해야 합니다. 일치하는 항목이 없으면 tss1이 열 5에 인쇄됩니다. 그렇지 않으면 tss1, tss2, tss3 등이 5열에 인쇄됩니다.

내 시도:awk -F'\t' '{$3=$3"\t" "tss"++cnt} 1' file

Input file <tab separated>
chrX    Gripap1 7367120 7367120
chrX    Pim2    7455431 7455431
chrX    Pola1   90877494    90877494
chrX    Pcyt1b  *90900201*  90900201
chrX    Pcyt1b  *90900201*  90920450

산출

Output file <tab separated>
chrX    Gripap1 7367120 7367120     tss1
chrX    Pim2    7455431 7455431     tss1
chrX    Pola1   90877494    90877494     tss1
chrX    Pcyt1b  *90900201*  90900201     tss1
chrX    Pcyt1b  *90900201*  90920450     tss2

답변1

다음과 같은 스크립트가 awk작동해야 합니다.

NR == 1 { print }
NR > 1 {
  if( $3 == last ) {
    count++
  } else {
    count = 1
  }
  last = $3
  print $1, $2, $3, $4, "tts" count
}

OFS기본값은 탭 문자이며, 탭으로 구분된 입력은 탭 문자에서도 작동합니다. 따라서 다음 awk 스크립트를 사용하십시오 script.awk.

$ awk -f script.awk inputfile

답변2

awk 함수를 사용하여 세 번째 필드에서 숫자가 아닌 항목을 제거할 수 있습니다 gensub.[^0-9]

awk -v c=1 '{$(NF+1)="tss"((gensub("[^0-9]","","g",$3)==$4)?c:++c)}1' OFS='\t' file

이렇게 하면 세 번째와 네 번째 열의 비교를 기반으로 개수가 포함된 문자열인 새 열이 생성됩니다 $(NF+1). 이는 와 동일한 삼항 연산자를 사용하여 수행됩니다. 마지막 것은 행을 인쇄하는 기본 awk 작업입니다.tssc...?...:...if...then...else
1

관련 정보