![읽기 가능한 파일의 일부를 선택하려면 cut 또는 awk를 사용하십시오.](https://linux55.com/image/181945/%EC%9D%BD%EA%B8%B0%20%EA%B0%80%EB%8A%A5%ED%95%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%9D%BC%EB%B6%80%EB%A5%BC%20%EC%84%A0%ED%83%9D%ED%95%98%EB%A0%A4%EB%A9%B4%20cut%20%EB%98%90%EB%8A%94%20awk%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%8B%AD%EC%8B%9C%EC%98%A4..png)
저는 사람의 이름과 전화번호, 주소 등 기타 많은 정보가 포함된 파일을 만들었습니다. 해당 목록에 있는 모든 사람의 이름만 선택할 수 있는 방법이 궁금합니다.
이 목록에는 한 사람이 여러 이름을 가질 수 있는 열이 없습니다(이름과 성뿐만 아니라 중간 이름도 의미함). 각 줄의 형식은 다음과 같습니다.
student number,,,Name_of_student,,,address
예를 들어:
a684932,,,John Liam Anderson,,,Kentucky
a683910,,,Mary Reynold,,,Michigan
...
...
출력은 다음과 같아야 합니다.
John Liam Anderson
Mary Reynold
답변1
귀하의 데이터는 쉼표로 구분된 값(CSV) 형식인 것 같습니다.
CSV 파일이 "단순"인 경우, 즉 쉼표로 구분된 필드에 쉼표가 있는 문자열이 포함되어 있지 않고 이름이 항상 필드 4에 있는 경우(예제 입력에서와 같이) 다음을 필드 구분 기호로 awk
사용하세요 ,
. 스크립트:
awk -F',' '{print $4}' file.txt
필드 값에 다음이 포함될 수 있는 경우 ,
(예: 이름이 it 인 경우 ) John Liam Anderson, jr.
이 순진한 접근 방식은 더 이상 작동하지 않습니다 . CSV 형식을 정의하는 "권한 있는" 표준이 없기 때문에(오픈 소스 소프트웨어는 이를 따를 가능성이 높지만)RFC4180), 따라서 이러한 문자열의 처리는 "필드 값 쉼표"를 이스케이프 처리하는 방법에 따라 달라집니다.