특정 문자열과 파일 이름 자체를 추출하려는 파일이 많습니다(>100,000). 파일은 다음과 같이 구성됩니다.
파일 이름:sequence.php?ID=gi|90022703|ref|YP_528530.1|
[Random text]
Description: Xylanase/Chitin Deacetylase-Like Protein [Saccharophagus Degradans 2-40]
Source: NCBI-Bacteria
Species: Saccharophagus degradans 2-40
Taxonomy: Bacteria; Proteobacteria; Gammaproteobacteria; Alteromonadales; Alteromonadaceae; Saccharophagus
파일 이름(ID= 뒤의 모든 항목이 바람직함)과 파일에서 "분류" 뒤의 모든 항목을 추출하고 싶습니다.
그것은 다음과 같습니다:
gi|90022703|ref|YP_528530.1| Bacteria; Proteobacteria; Gammaproteobacteria; Alteromonadales; Alteromonadaceae; Saccharophagus
가능합니까? (여러 파일에서도 작동합니다. 즉, 각각의 새로운 정보를 텍스트 출력 파일에 추가합니다.)
답변1
여러 파일을 처리하는 경우 grep
일치하는 항목 앞에 각 파일 이름을 인쇄합니다. 정규식을 검색할 필요가 없으므로 이 -F
옵션을 사용하여 고정 문자열을 검색할 수 있습니다(속도가 빨라짐). 이 -r
옵션은 grep
재귀 작업을 나타냅니다. 이 -r
옵션은 GNU 버전이므로 grep
다른 버전의 grep이 설치된 시스템에서는 작동하지 않습니다.
grep -r -F 'Taxonomy' /path/to/directory
그러면 다음과 같은 줄이 표시됩니다.
sequence.php?ID=gi|90022703|ref|YP_528530.1|:Taxonomy: Bacteria; Proteobacteria; Gammaproteobacteria; Alteromonadales; Alteromonadaceae; Saccharophagus
이를 원하는 출력으로 조정하는 방법에는 여러 가지가 있습니다 cut
.
grep -r -F 'Taxonomy' /path/to/directory | cut -d = -f 2 | cut -d : -f 1,3
그러면 줄이 다음과 같이 변경되어야 합니다.
gi|90022703|ref|YP_528530.1|: Bacteria; Proteobacteria; Gammaproteobacteria; Alteromonadales; Alteromonadaceae; Saccharophagus
이것은 설명하는 내용과 정확히 일치하지 않습니다. | tr -d :
정말로 콜론을 제거하고 싶다면 튜브 끝을 거기에 넣을 수 있습니다. 마지막으로 출력을 파일로 리디렉션합니다.
grep -r -F 'Taxonomy' /path/to/directory | cut -d = -f 2 | cut -d : -f 1,3 > file.txt
>>
파일을 덮어쓰는 대신 파일에 추가 하려면 >
.
답변2
awk '/^Taxonomy:/{t=FILENAME; sub(/^.*\?ID=/, x, t); $1=t; print; close(FILENAME)}' /files/location/* > output.txt