구분 기호

구분 기호

태그 개수가 포함된 게놈 데이터 파일이 있는데 한 번에 몇 개가 표시되는지 알고 싶습니다.

$ grep "^1" file |wc -l

1로 시작하는 모든 행을 포함하므로 10번, 11번, 100번, 1245번 등에 대한 레이블이 포함됩니다. 어떻게 해야 하나요?

Current format
79      TGCAG.....
1       TGCAG.....
1257    TGCAG.....
1       TGCAG......

나는 단지 다음 줄을 원합니다 :

1       TGCAG.....

따라서 1257로 시작하는 줄을 포함할 수 없습니다.노트:위 파일은 탭으로 구분되어 있습니다.

답변1

몸속의 질문

1a로 시작하고 공백이 오는 줄을 선택하세요 .

grep -c '^1\s'          file
grep -c '^1[[:space:]]' file

이는 또한 행 수를 제공합니다(wc를 호출할 필요 없음).

제목에 질문

1 아니요다음에는 다른 숫자(또는 아무것도 없음)가 옵니다:

grep -cE '^1([^0-9]|$)' file 

그러나 위의 두 가지 해결 방법에는 모두 몇 가지 흥미로운 문제가 있으므로 계속 읽어보세요.


질문 본문에서 사용자는 파일이 "탭으로 구분"되어 있다고 주장합니다.

구분 기호

상표

1a로 시작하고 그 뒤에 탭 문자(명령의 실제 탭 문자)가 오는 줄입니다. 구분 기호가 공백(또는 다른 구분 기호이거나 구분 기호가 없는 경우)이면 이 작업이 실패합니다.

grep '^1    ' file

공간

1a로 시작하고 그 뒤에 공백(명령의 실제 공백)이 오는 줄입니다. 구분 기호가 다른 구분 기호이거나 구분 기호가 없으면 이 작업은 실패합니다.

grep '^1 ' file

탭 또는 공백

grep '^1(   | )' file
grep '^1[[:blank:]]' file

공백

보다 유연한 옵션은 여러 공백(가로 및 세로) 문자를 포함하는 것입니다. 문자 클래스 세트는 (공백), (가로 탭), (캐리지 리턴), (줄 바꿈), (세로 탭) 및 (폼 피드)로 구성됩니다 [:space:]. 그러나 grep은 개행 문자와 일치할 수 없습니다(이는 내부 제한 사항이며 이 옵션을 통해서만 피할 수 있습니다). 이는 구분 기호 설명으로 사용될 수 있습니다. 더 짧은 GNU 사용 가능 약어를 사용할 수도 있습니다.\t\r\n\v\f-z\s

grep -c '^1[[:space:]]` file
grep -c '^1\s'          file

그러나 구분 기호가 콜론 :이나 기타 구두점 문자(또는 문자)인 경우 이 옵션은 실패합니다.

경계

[_[:alnum:]]또는 숫자에서 실제로 " ( ) _a-zA-Z0-9에 없는 문자 "인 "숫자가 아닌" 경계로 변환을 사용할 수 있습니다 .

grep -c  '^1\b' file       # portable but not POSIX.
grep -c  '^1\>' file       # portable but not POSIX.
grep -wc '^1'   file       # portable but not POSIX.
grep -c  '^1\W' file       # portable but not POSIX (not match only a `1`) (not underscore in BSD).

그러면 1로 시작하고 그 뒤에 구두점이 오는 유효한 줄이 허용됩니다.

답변2

당신이 원하는 것은 다음과 같습니다.

$ grep '^1\b' a
1        TGCAG.....
1        TGCAG......

계산 부분의 경우:

$ grep -c '^1\b' file
2

답변3

그리고 awk:

awk '$1 == "1" { print; x++ } END { print x, "total matches" }' inputfile

답변4

사용 grep:

grep -c '^1\s' file

이는 1로 시작하고 뒤에 공백이 오는 모든 줄과 일치하고 해당 줄의 수를 제공합니다(필요하지 않음 wc -l).


$ cat input
79       TGCAG.....
1        TGCAG.....
1257     TGCAG.....
1        TGCAG......
$ grep -Ec '^1\s' input
2

관련 정보