텍스트 파일의 일부 출력 [닫기]

텍스트 파일의 일부 출력 [닫기]

내 입력은 다음과 같습니다.

>gi|481443199|gb|MH447771.1|
49      0       0       0       1
50      0       0       1       0
>gi|987078004|gb|RTYJ01067061.1|
412     0       0       1       0
413     1       0       0       0
>gi|557075006|gb|ERTJ01078061.1|
41     0       0       1       0
41     1       0       0       0
>gi|787073002|gb|WERJ01045061.1|
612     0       0       1       0
613     1       0       0       0
>gi|887079001|gb|WERJ01045061.1|
715     0       0       1       0
716     1       0       0       0

일부 줄을 인쇄하고 싶지만 으로 시작하는 다른 모든 줄은 건너뛰고 >그 이후의 모든 줄은 다음 줄까지 건너뜁니다 >. 위 입력 예의 경우 출력은 다음과 같습니다.

>gi|481443199|gb|MH447771.1|
49      0       0       0       1
50      0       0       1       0
>gi|557075006|gb|ERTJ01078061.1|
41     0       0       1       0
41     1       0       0       0
>gi|887079001|gb|WERJ01045061.1|
715     0       0       1       0
716     1       0       0       0

어떻게 해야 하나요?

답변1

다른 모든 > ...블록을 건너뛰려면:

 awk '/^>/ { p = !p } p' input.txt

p인쇄 플래그입니다. 기본 작업은 콘텐츠가 제공되지 않을 때 이므로 p인쇄할 때 true를 나타냅니다 . 에서 변수는 빈 상태로 시작하고 부울 컨텍스트에서 false로 평가됩니다. 행에 도달할 때 마다 플래그가 전환됩니다.pprintawk> ...p

n각 블록을 줄로 구분하여 인쇄하려면 다음을 수행하세요 > ....

awk -v n=200 '/^>/ { if (skip == 0) skip = n - 1; else --skip; } skip == n - 1' input.txt

비슷한 논리입니다. n2가 아니기 때문에 부울 플래그 대신 카운터를 사용해야 합니다. 여기에서는 skip인쇄를 다시 시작하기 전에 건너뛸 줄 수를 계산합니다. > ...나는 skip == n - 1바로 가기로 인쇄 플래그로 사용합니다.

답변2

awk의 경우 다음과 같이 할 수 있습니다.

awk 'BEGIN{pr=true}/^>/{pr=!pr}{if (pr) {print}}'

이는 인쇄 시기를 나타내는 플래그(pr)를 설정하며, 토큰이 나타날 때마다 전환됩니다.

답변3

$ awk '/^>/{f=f?0:1;}f' file

"^"로 시작하는 줄이 나타나면 플래그 변수를 켜고 끄세요. 켜져 있으면 라인이 인쇄되고, 그렇지 않으면 인쇄되지 않습니다.

답변4

보다 일반적인 해결 방법은 다음을 시도해 볼 수 있습니다.

awk 'k%10==0{print} /^>/ {k++}' input.txt

k줄이 다음으로 시작될 때마다 변수가 증가 >하고 k 모듈로 10이 0이면 해당 줄이 인쇄됩니다. 따라서 두 번째 줄마다 인쇄하려면 , 200번째 줄마다 등 k%10==0으로 변경하세요.k%2==0k%200==0

경고: 이 버전에서는 첫 번째 줄이 항상 인쇄됩니다.

관련 정보