답변1
다음 한 줄로 시도해 보세요.
cut -f4 in.tsv | tail -n +2 | grep -P '\S'
세부사항:
cut -f4 in.tsv
: 입력 파일의 TAB으로 구분된 네 번째 열을 출력합니다 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 != ""
: 4번째 필드가 비어 있지 않은 경우…{arr[$4] = 1}
: ...배열 할당에서 인덱스로 사용합니다.- 동일한 인덱스의 후속 인스턴스는 배열 항목을 덮어쓰며 중복 항목은 저장되지 않습니다.
- 할당된 값(
1
)은 임의적0
이거나"blergh"
잘 작동합니다.
END
: 모든 줄을 읽었을 때…{for (idx in arr) print idx}
: ...모든 인덱스를 인쇄합니다.