답변1
다음 한 줄을 시도해 보세요.
cut -f4 in.tsv | tail -n +2 | grep -P '\S'
세부 정보:
cut -f4 in.tsv
: 입력 파일의 탭으로 구분된 네 번째 열을 출력합니다 in.tsv
.
tail -n +2
: 첫 번째 줄(제목)을 삭제합니다.
grep -P '\S'
: 공백이 아닌 문자가 있는 줄만 유지합니다. 즉, 빈 줄을 삭제합니다. Perl 정규 표현식을 사용하도록 -P
알려주십시오 .grep
고유한 유전자 이름만 원할 경우 sort -u
다음과 같이 추가하세요.
cut -f4 in.tsv | tail -n +2 | grep -P '\S' | sort -u
답변2
귀하의 요청이 무엇인지 확실하지 않습니다. 첫 번째 행을 제외하고 네 번째 열("gene"으로 표시됨)의 값만 "가설 단백질"보다 여섯 번째 열("product"로 표시됨)의 값과 다르다고 가정합니다.
grep -v "hypothetical protein" < <(tail -n +2 file.tsv) | cut -f4 -d$'\t'
설명하다
tail -n +2 file.tsv
첫 번째 행 제외('locus_tag', 'type' 등)
grep -v "hypothetical protein"
"가설 단백질" 문자열이 포함된 모든 행을 제외합니다.
cut -f4 -d$'\t'
네 번째 열을 인쇄합니다.
답변3
이것은 임무처럼 보입니다 awk
. 당신은 시도 할 수 있습니다:
awk '{if ($4); print $4 $7}' filename.tsv
댓글의 유용한 제안을 바탕으로:
awk 'BEGIN { FS = "\t" } ; $4 != "" { print $4 "\t" $7}'
답변4
awk를 사용하세요:
awk -F'\t' '$4 != "" {arr[$4] = 1} END {for (idx in arr) print idx}' file.tsv
-F'\t'
: 탭으로 분할됩니다.$4 != ""
: 네 번째 필드가 비어 있지 않은 경우...{arr[$4] = 1}
: ...배열 할당 시 인덱스로 사용합니다.- 동일한 인덱스의 후속 인스턴스는 배열 항목을 덮어쓰며 중복 항목은 저장되지 않습니다.
- 지정된 값(
1
)은 임의적0
이거나"blergh"
정상적으로 작동합니다.
END
: 모든 줄을 읽었을 때...{for (idx in arr) print idx}
: ...모든 인덱스를 인쇄합니다.