
다음과 같은 파일이 있습니다.
head logistic_results.assoc_3.logistic
CHR SNP BP A1 TEST NMISS OR STAT P
2 2:129412140:T:C 129412140 C ADD 1438 1.523 3.89 0.0001004
15 15:26411414:G:A 26411414 A ADD 1438 0.5577 -3.889 0.0001005
7 7:24286442:T:G 24286442 G ADD 1438 0.7449 -3.889 0.0001007
7 7:24286638:G:C 24286638 C ADD 1438 0.7449 -3.889 0.0001007
2 2:129403636:T:C 129403636 C ADD 1438 1.741 3.889 0.0001008
15 15:70363332:A:G 70363332 G ADD 1438 1.366 3.886 0.000102
3 3:13698784:G:A 13698784 A ADD 1438 1.465 3.884 0.0001028
3 3:32665882:C:A 32665882 A ADD 1438 1.54 3.883 0.000103
12 12:32855080:A:G 32855080 G ADD 1438 4.013 3.883 0.0001031
첫 번째 열에 3이 포함된 모든 행을 추출하는 방법은 무엇입니까?
이것을 시도했지만 빈 파일이 있습니다 ...
grep '^3' logistic_results.assoc_3.logistic > logistic_results.assoc_3.logistic_chr3
awk '/^3/' logistic_results.assoc_3.logistic > logistic_results.assoc_3.logistic_chr3
이 예의 경우 결과는 다음과 같습니다.
3 3:13698784:G:A 13698784 A ADD 1438 1.465 3.884 0.0001028
3 3:32665882:C:A 32665882 A ADD 1438 1.54 3.883 0.000103
답변1
비어 있지 않은 첫 번째 필드를 문자열과 비교합니다 3
.
awk '$1 == "3"' logistic_results.assoc_3.logistic >logistic_results.assoc_3.logistic_chr3
명령의 문제점은 해당 명령이 3
줄의 첫 번째 문자가 되기를 원하지만 예제 데이터에서는 숫자 앞에 공백이 있을 수 있다는 것입니다. 기본 필드 구분 기호와 함께 사용하면 선행 공백 문자에 관계없이 awk
염색체 이름이 배치됩니다 .$1
$1 == "1"
이것은 또한 염색체 1에서만 작동하기 때문에 더 안전할 것입니다 . 반면 1
필드 시작 부분에서 일치하는 정규식(예: /^[[:blank:]]*1/
또는 )도 예를 들어 및 $1 ~ /^1/
와 일치합니다 .11
12
답변2
또는:
grep "^[[:blank:]]*3" logistic_results.assoc_3.logistic > logistic_results.assoc_3.logistic_chr3