CSV - 특정 항목만 유지

CSV - 특정 항목만 유지

""내부에는 다음과 같이 구분된 많은 데이터가 있습니다 . 아래 두 줄의 예,

"stampthisandthat.com","GANDI SAS","[email protected]","whois.gandi.net","A.DNS.GANDI.NET|B.DNS.GANDI.NET|C.DNS.GANDI.NET|","16-feb-2012","28-feb-2013","16-feb-2014","2012-02-16 00:00:00 UTC","2013-02-28 00:00:00 UTC","2014-02-16 00:00:00 UTC","clientTransferProhibited","2013-11-12 08:00:00 UTC","[email protected]","Laura VOGT","","Gandi, 63-65 boulevard Massena","","","","(Gandi) Paris","","(Gandi) 75013","(Gandi) FR","33143730576","","33170377666","","[email protected]","Laura VOGT","","Gandi, 63-65 boulevard Massena","","","","(Gandi) Paris","","(Gandi) 75013","(Gandi) FR","33143730576","","33170377666",""|
"salochinbd.com","FASTDOMAIN, INC.","[email protected]","whois.fastdomain.com","NS1.IPAGE.COM|NS2.IPAGE.COM|","17-feb-2012","03-feb-2013","17-feb-2014","2012-02-17 00:00:00 UTC","2013-02-03 00:00:00 UTC","2014-02-17 00:00:00 UTC","ok","2013-11-12 08:00:00 UTC","[email protected]","","","","","","","Cedar Rapids","Iowa","52402","UNITED STATES","","","13192100679","","[email protected]","","","","","","","Cedar Rapids","Iowa","52402","UNITED STATES","","","13192100679",""|

특정 데이터만 보관하려면 어떻게 해야 하나요? 예를 들어 첫 번째, 두 번째, 다섯 번째 데이터만 유지하는 방법입니다 "".

답변1

cut -d\" -f2,4,10 <in | tr \" , >out

...필드 1,2,5에 대한 참조 비트만 가져온 다음 쉼표로 구분했는지 확인합니다.

아니면 따옴표 안에 쉼표가 있을 수도 있기 때문에...

 cut -d\" -f-5,10-11 <in | sed s/,$// >out

...심지어...

cut -d\" -f-5,10 <in | paste -d\" - /dev/null >out

...올바르게 설정했을 수도 있습니다.

첫 번째는 다음과 같이 인쇄됩니다.

stampthisandthat.com,GANDI SAS,A.DNS.GANDI.NET|B.DNS.GANDI.NET|C.DNS.GANDI.NET|
salochinbd.com,FASTDOMAIN, INC.,NS1.IPAGE.COM|NS2.IPAGE.COM|

...그리고 두 번째와 세 번째도...

"stampthisandthat.com","GANDI SAS","A.DNS.GANDI.NET|B.DNS.GANDI.NET|C.DNS.GANDI.NET|"
"salochinbd.com","FASTDOMAIN, INC.","NS1.IPAGE.COM|NS2.IPAGE.COM|"

다음 예에서는 필드 1,3,17,21,22,23,24에서 유사한 작업을 수행하는 방법을 보여줍니다.

printf '"%s"\n' "$(seq -s\",\" 35)" |
cut -d\" -f-3,6-7,34-35,42-48       |
paste -d\" - /dev/null

"1","3","17","21","22","23","24"

...다음과 같이 출력에서 ​​해당 필드만 가져옵니다 seq.

"1","2","3",..."35"

답변2

이라는 잘 알려지지 않은 프로그램이 있습니다.CSV 견적이를 통해 cut, , 및 sed와 같은 표준 도구를 사용하여 awkCSV 파일을 처리 할 수 있습니다. 따옴표 안의 특수 문자를 인쇄할 수 없는 문자에 매핑한 다음 다시 매핑하는 방식으로 작동합니다. 이 프로그램을 사용하면 다음과 같이 간단합니다.

csvquote file.csv | cut -d , -f 1,2,5 | csvquote -u

산출:

"stampthisandthat.com","GANDI SAS","A.DNS.GANDI.NET|B.DNS.GANDI.NET|C.DNS.GANDI.NET|"
"salochinbd.com","FASTDOMAIN, INC.","NS1.IPAGE.COM|NS2.IPAGE.COM|"

답변3

awk -F',' '{print $1 $2 $5}'- 이게 당신이 찾고 있는 거예요?

답변4

쉼표가 포함된 필드 문제를 해결하려면 필드 구분 기호를 다음으로 변경하세요.인용문 + 쉼표;필드에 포함하는 쉼표가 필드의 시작 및/또는 끝에 있지 않다고 가정합니다.

$ awk -F'(\",)' '{print $1 $2 $17}' test.txt

그냥 확인하세요탈출하다셸을 보호하려면 작은따옴표 안에 따옴표와 주변 필드 구분 기호를 넣으세요.

노트gawk나는 이것이 Fedora 20에서 사용된다고 생각합니다.

관련 정보