문제

내가 처리하는 텍스트 파일로서 잡종 선택의 형식입니다.여기를 들어(열 AB 는 탭으로 구분):

A   B
a   Name1=Val1, Name2=Val2, Name3=Val3
b   Name1=Val4, Name3=Val5
c   Name1=Val6, Name2=Val7, Name3=Val8

파일을 수 있는 헤더가 있는지,있 혼합 구분 제도가 열 이름/값 쌍으로 위 etc.
나는 수시로 임시 데이터를 추출해야에서 같은 파일에서 다양한 방법이다.예를 들어 위의 데이터에서 내가 원하는 값과 연결된 Name2 그것이 존재합니다.즉

A   B
a   Val2
c   Val7

What 도구/기술이 있을 수행하기 위한 이러한 조작 중 하나로 라인 명령을 사용하여 위의 예제로지 확장하여 다른 경우에는?

도움이 되었습니까?

해결책

내가 좋아하지 않 sed 너무 많지만,그것은 작품에 대한 이러한 것들:

var="Name2";sed -n "1p;s/\([^ ]*\) .*$var=\([^ ,]*\).*/\1 \2/p" < filename

를 제공합니다:

 A B
 a Val2
 c Val7

다른 팁

당신은 모든 기본 bash 쉘 명령,예를 들어 grep,절단,나오고 awk 에서 당신의 처분에 있습니다.사용할 수도 있습니다 Perl 이나 루비에 대한 더 복잡한 일이다.

에서 무엇을 봤어요 난 시작으로 Awk 을 위해 이런 종류의 물건 그 다음 당신이 무언가를 필요로 하는 경우에는 더 복잡한,내가 진행됩니다.

내가 사용하는 것 sed:

   # print section of file between two regular expressions (inclusive)
   sed -n '/Iowa/,/Montana/p'             # case sensitive

때문에 당신은 cygwin 에 나와 함께 가 Perl.그것은 배울 수있는 가장 쉬운 방법은(O'Reily 책: 학습 Perl 다)및 광범위하게 적용됩니다.

내가 사용하여 Perl.쓰 작은 모듈(또는 하나 이상)다루기 위한 다른 형식이 있습니다.할 수 있습한 후 실행 perl oneliners 를 사용하는 라이브러리입니다.예 것이 무엇에 대한 보 같은 다음과 같습니다:

perl -e 'use Parser;' -e 'parser("in.input").get("Name2");'

을 인용하지 않는 나를 구문에,하지만 그의 일반적인 아이디어.추상적인 손에서 작업할 수 있도록의 관점에서 생각하이 무엇을 해야 할지,어떻게 할 필요가 있습니다.Ruby 것,또 다른 옵션은 그것이 깨끗한 구문,하지만 하나의 언어로 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top