태그 개수가 포함된 게놈 데이터 파일이 있는데 한 번에 몇 개가 표시되는지 알고 싶습니다.
$ grep "^1" file |wc -l
1로 시작하는 모든 행을 포함하므로 10번, 11번, 100번, 1245번 등에 대한 레이블이 포함됩니다. 어떻게 해야 하나요?
Current format
79 TGCAG.....
1 TGCAG.....
1257 TGCAG.....
1 TGCAG......
나는 단지 다음 줄을 원합니다 :
1 TGCAG.....
따라서 1257로 시작하는 줄을 포함할 수 없습니다.노트:위 파일은 탭으로 구분되어 있습니다.
답변1
몸속의 질문
1
a로 시작하고 공백이 오는 줄을 선택하세요 .
grep -c '^1\s' file
grep -c '^1[[:space:]]' file
이는 또한 행 수를 제공합니다(wc를 호출할 필요 없음).
제목에 질문
ㅏ1
아니요다음에는 다른 숫자(또는 아무것도 없음)가 옵니다:
grep -cE '^1([^0-9]|$)' file
그러나 위의 두 가지 해결 방법에는 모두 몇 가지 흥미로운 문제가 있으므로 계속 읽어보세요.
질문 본문에서 사용자는 파일이 "탭으로 구분"되어 있다고 주장합니다.
구분 기호
상표
1
a로 시작하고 그 뒤에 탭 문자(명령의 실제 탭 문자)가 오는 줄입니다. 구분 기호가 공백(또는 다른 구분 기호이거나 구분 기호가 없는 경우)이면 이 작업이 실패합니다.
grep '^1 ' file
공간
1
a로 시작하고 그 뒤에 공백(명령의 실제 공백)이 오는 줄입니다. 구분 기호가 다른 구분 기호이거나 구분 기호가 없으면 이 작업은 실패합니다.
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