여러 파일에서 파일 이름과 문자열 추출

여러 파일에서 파일 이름과 문자열 추출

특정 문자열과 파일 이름 자체를 추출하려는 파일이 많습니다(>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

관련 정보