문자열이 포함된 줄을 찾은 다음 awk를 사용하여 해당 줄과 텍스트 파일의 모든 후속 줄을 반환합니다.

문자열이 포함된 줄을 찾은 다음 awk를 사용하여 해당 줄과 텍스트 파일의 모든 후속 줄을 반환합니다.

중복된 내용에 대해 사과드립니다. 하지만 제가 겪은 대부분의 문제는 행의 필드에서 특정 값을 가져오거나 알려진 파일에서 tail마지막 행을 가져오는 것과 관련이 있습니다.nn선험적으로. 일치하는 값이 있는 행을 찾고 해당 행과 모든 후속 행의 모든 ​​필드를 가져옵니다. 자세한 내용은 다음과 같습니다.

데이터베이스를 검색하는 데 사용되는 쿼리 기준에 대한 정보가 포함된 다양한 수의 메타데이터 헤더 행이 포함된 온라인 데이터베이스에서 반환된 데이터 파일이 있습니다. 이 헤더 행 뒤에는 깔끔한 데이터 프레임이 있습니다. 예:

Query date: February 3, 2020, 1:34:57 PM
Database: <database name>
\n
Search criteria:
\n
Geographic bounding box coordinates: -130.00 20.00; -130.00 24.00; -120.00 24.00; -120.00 20.00
Sample type: rocks > sediments > dust
\n
SAMPLE ID,REFERENCE,LONGITUDE,LATITUDE,X,Y,Z,A
56,Author (YYYY) Title: Journal,-127.3,22,1.7,2.3,0,0.55
56,Author (YYYY) Title: Journal,-127.34,22.4,1.9,1.3,0.5

다음을 사용하여 데이터 필드 이름이 포함된 행을 성공적으로 찾았습니다.

SID=$(awk -F, '{ if ($1 == "SAMPLE ID") print NR }' data.csv)

echo $SID9예상대로 반환

이제 해당 행의 필드 이름과 데이터가 포함된 모든 후속 행을 가져와서 새 파일로 보내고 싶습니다. 즉, 전체 입력 파일을 구문 분석하고 해당 행을 NR >= $SID새 파일로 보내고 싶습니다.

이것은 제가 사용했던 코드이지만 몇 행을 제외한 거의 모든 데이터를 반환합니다. 원하는 데이터를 얻는 방법이나 데이터가 있는 행을 생략하는 이유를 이해할 수 없습니다.

awk -F, -v r=$SID '{ if (NR >= $r) print $0}' data.csv > output.csv

이것이 내 예상 결과입니다.

SAMPLE ID,REFERENCE,LONGITUDE,LATITUDE,X,Y,Z,A
56,Author (YYYY) Title: Journal,-127.3,22,1.7,2.3,0,0.55
56,Author (YYYY) Title: Journal,-127.34,22.4,1.9,1.3,0.5

어떤 도움이라도 좋을 것입니다! 명확하지 않다면 awk를 완전히 처음 접한 것입니다! 즉, 좋은 학습 입문 자료에 대한 링크도 환영합니다.

답변1

awk에서는 th$r 의 값을 나타냅니다.r 대지, 그 자체 의 가치보다는 r. $r다음으로 바꾸면 솔루션이 작동합니다 r.

awk -F, -v r=$SID '{ if (NR >= r) print $0}' data.csv

또는 (보다 관용적으로 사용기본 인쇄 작업)

awk -F, -v r=$SID 'NR >= r' data.csv

그러나 실제로 두 단계로 수행할 필요는 없습니다.

awk -F, '$1 == "SAMPLE ID" {p=1} p' data.csv

또는 (CSV 구조를 완전히 무시하고)

awk '/^SAMPLE ID,/{p=1} p' data.csv

또한 작동해야합니다.

관련 정보