CSV 데이터세트를 텍스트 데이터세트로

CSV 데이터세트를 텍스트 데이터세트로

1000개의 행과 10개의 열을 포함하는 CSV 데이터 세트 Student.csv가 있습니다.

샘플 데이터는 다음과 같습니다.

s_id,s_name,s_dob,s_class,s_marks,s_parentname,
   1,abc,1/1/18,5,49,def,
   2,xyz,1/1/17,4,85,abc,
   3,pqr,1/2/18,2,78,mnp,

이 데이터 세트에서 행에 "abc"가 포함된 모든 날짜를 텍스트 파일로 복사하고 싶습니다.

예상 출력:

text.txt
1/1/18
1/1/17

답변1

grep abc student.csv | cut -d, -f 3 >text.txt

이렇게 하면 먼저 어디에서든 student.csv하위 문자열이 포함된 모든 행을 추출한 abc다음 해당 행에서 세 번째 쉼표로 구분된 열을 제거하고 에 저장합니다 text.txt.

질문에 제공된 데이터를 기반으로 text.txt궁극적으로 다음을 포함하게 됩니다.

1/1/18
1/1/17

이는 원본 파일에 따라 달라집니다.단순한CSV 파일, 즉 쉼표나 줄 바꿈이 포함된 필드가 없습니다.

검색하고 싶은 abc항목완전한 단어grep -w abc대신에 just를 사용하세요 grep abc. 이렇게 하면 와 같은 문자열이 포함된 행의 일치는 방지되지만 abcde포함된 필드와는 여전히 일치합니다 abc xyz.

임의의 복잡한 문자열(여전히 간단한 CSV 파일에 있음)이 포함된 필드를 찾고 필드가 해당 문자열과 정확히 동일해야 하는 경우 각 행의 필드를 반복해야 합니다.

string='some string' awk -F, '{ for (i = 1; i <= NF; ++i) if ($i == ENVIRON["string"]) { print $3 ; next } }' student.csv

awk코드는 각 줄의 모든 필드를 반복하여 값이 환경 변수의 값과 정확히 동일한 쉼표로 구분된 필드를 찾습니다 string. 해당 필드가 발견되면 세 번째 필드가 인쇄됩니다.

답변2

밀러 사용(https://github.com/johnkerl/miller)부터 시작

s_id,s_name,s_dob,s_class,s_marks,s_parentname,
1,abc,1/1/18,5,49,def,
2,xyz,1/1/17,4,85,abc,
3,pqr,1/2/18,2,78,mnp,

그리고 달리는 중

mlr --nidx --fs "," filter -S '$2=="abc"' then cut -f 3 input.txt >output.txt

당신은 할 것

1/1/18

답변3

전체 게임이 필요하다는 점을 고려하면 다음과 같습니다.

$ awk -F, 'FNR==1{print FILENAME} /(^|,)abc(,|$)/{print $3}' file
file
1/1/18
1/1/17

또는 abc문자 그대로 처리하려는 RE 메타 문자가 실제로 포함되어 있을 수 있으므로 정규식 일치 대신 문자열을 수행해야 합니다.

$ awk -F, 'FNR==1{print FILENAME} index(","$0",",",abc,"){print $3}' file
file
1/1/18
1/1/17

또는 열 헤더를 인쇄합니다.

$ awk -F, 'FNR==1{print $3} /(^|,)abc(,|$)/{print $3}' file
s_dob
1/1/18
1/1/17

$ awk -F, 'FNR==1{print $3} index(","$0",",",abc,"){print $3}' file
s_dob
1/1/18
1/1/17

관련 정보