중복된 내용에 대해 사과드립니다. 하지만 제가 겪은 대부분의 문제는 행의 필드에서 특정 값을 가져오거나 알려진 파일에서 tail
마지막 행을 가져오는 것과 관련이 있습니다.n
n
선험적으로. 일치하는 값이 있는 행을 찾고 해당 행과 모든 후속 행의 모든 필드를 가져옵니다. 자세한 내용은 다음과 같습니다.
데이터베이스를 검색하는 데 사용되는 쿼리 기준에 대한 정보가 포함된 다양한 수의 메타데이터 헤더 행이 포함된 온라인 데이터베이스에서 반환된 데이터 파일이 있습니다. 이 헤더 행 뒤에는 깔끔한 데이터 프레임이 있습니다. 예:
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 $SID
9
예상대로 반환
이제 해당 행의 필드 이름과 데이터가 포함된 모든 후속 행을 가져와서 새 파일로 보내고 싶습니다. 즉, 전체 입력 파일을 구문 분석하고 해당 행을 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
또한 작동해야합니다.