가지고 있는 정보가 위치뿐인 경우 특정 위치에 대한 값 찾기

가지고 있는 정보가 위치뿐인 경우 특정 위치에 대한 값 찾기

두 개의 필드가 있는 약 16,000줄 길이의 csv 파일이 있습니다. 첫 번째 필드에는 값 목록이 포함되고 두 번째 필드에는 세미콜론으로 구분된 이름 및 이름 목록이 포함됩니다.

3,           Jack Mackie; Hanna Jones; Mike Freeland; Ollie Downs; Farrah Anderson; Judy John

9,           Jewel Woodley; Jean Sullivan; Marcia Robin; Kerry Morton; Joelle Armour; Zakiya Pulwarty; Karen Thornhill; Shurm Ahmet; Ed Aslan; Adam Condell; Zeliha Manners; Joan Johnson

5,           Haydn Smart; Andre Henry; Tamara Brownbill; Kelly Withers; Eden Anderson; Naomi Casa; Azaria Amritt; Jamile Newton; Nabahe Durand

첫 번째 필드의 숫자 위치에 해당하는 두 번째 필드에 나열된 이름은 팀 리더입니다. 예를 들어 첫 번째 행의 팀 리더는 Mike Freeland(위치 3)이고 두 번째 행의 팀 리더는 Ed입니다. 아슬란(9위), 세 번째 줄은 에덴 앤더슨(5위)이다. 모든 팀 리더의 이름을 추출해야 합니다.

팀 리더의 이름을 모두 추출하고 이를 내 csv 파일에 대해 실행한 다음 새 파일로 출력하는 셸 스크립트를 작성하려고 합니다.

정보를 찾기 위해 "grep" 또는 "awk"와 "FS"(FS는 공백 대신 세미콜론을 구분 기호로 지정)를 사용하는 방법을 조사했지만 해당 값을 첫 번째 필드에 통합하는 방법을 모르겠습니다. 선택 기준으로 . 내가 본 모든 예는 알려진 값이나 문자열을 검색하기 위해 이러한 명령을 사용합니다. 하지만 이 경우에는 값의 위치(이름과 성)만 알 수 있습니다. 올바른 명령을 찾고 있습니까?

나는 대본을 생각해 내지 못했습니다. 팀장의 이름을 추출하는 방법은 무엇입니까?

답변1

$ awk -F, '{split($2,names,";"); print names[$1]}' file.csv
 Mike Freeland
 Ed Aslan
 Eden Anderson

답변2

$ awk -F'[,;] ' '{print $($1 + 1)}' file
Mike Freeland
Ed Aslan
Eden Anderson

필드 구분 기호를 '[,;] '쉼표 또는 세미콜론 뒤에 공백 문자로 변경합니다. 그런 다음 첫 번째 필드의 값을 가져와 $1하나를 추가하고 해당 필드의 값을 인쇄합니다 $(...).

답변3

사용밀러( mlr)그리고 입력 데이터에 빈 행이 없다고 가정합니다.

$ mlr --csv -N put -q 'print clean_whitespace(splita($2, ";")[$1])' file
Mike Freeland
Ed Aslan
Eden Anderson

이렇게 하면 unheader CSV 입력의 두 번째 필드 값이 문자 배열로 분할되고 ;첫 번째 필드의 값이 제공하는 요소가 추출됩니다. 과도한 공백 문자는 인쇄하기 전에 값에서 제거됩니다.

관련 정보