2014-12-19 10 views
-1

perl 스크립트 (해시)를 사용하여 데이터 서식을 지정할 수 있습니다. 어떤 셸 하나의 라이너를 통해 수행 할 수 있는지 궁금합니다. 따라서 입력 형식이
인 경우 펄 스크립트를 작성하지 않아도됩니다. 예 입력 :awk 또는 다른 쉘 명령을 사용하여 열의 데이터 그룹화

rinku a 
rinku b 
rinku c 
rrs  d 
rrs  e 
abc  f 
abc  g 
abc  h 
abc  i 
xyz  j 

예 출력 :

rinku a,b,c 
rrs d,e 
abc f,g,h,i 
xyz j 

쉘/AWK /를 사용하여 명령을 도와주세요 입력 형식을 나오지.

감사합니다, 린쿠

답변

0

awk 프로그램도 연관 펄과 유사한 배열이 있습니다 X Y (키 X의 각 라인에 대한

awk '{v[$1]=v[$1]","$2}END{for(k in v)print k" "substr(v[k],2)}' inputFile 

, 값을 Y), 기본적으로 모든 arr에 ,Y이 추가됩니다. ay 요소는 모두 X으로 색인화되며, 모두 빈 문자열로 시작한다는 사실을 이용합니다.

그런 다음 값이 ,x,y,z 인 형식이므로 출력 할 때 첫 번째 문자를 제거하면됩니다.

이 (inputFile에서) 입력 데이터를 생성 : AS를

rinku a,b,c 
abc f,g,h,i 
rrs d,e 
xyz j 

를 제외하고, 당신이로 잘 원래로 포맷하려는 경우, 당신은 program.awk 파일을 만들 수 있습니다

{ 
    val[$1] = val[$1]","$2 
    if (length ($1) > maxlen) { 
     maxlen = length ($1) 
    } 
} 
END { 
    for (key in val) { 
     printf "%-*s %s\n", maxlen, key, substr(val[key],2) 
    } 
} 

및 실행 그게 :

awk -f program.awk inputFile 
당신은 0

과를 얻을 수 있습니다 :

rinku a,b,c 
abc f,g,h,i 
rrs d,e 
xyz j 
+0

고맙습니다. 많은 paxdiablo –

2

방법에 대한

$ awk '{arr[$1]=arr[$1]?arr[$1]","$2:$2} END{for (i in arr) print i, arr[i]}' input 
rinku a,b,c 
abc f,g,h,i 
rrs d,e 
xyz j 
+0

고마워요. 그것은 내 일을 더 쉽게 만들었습니다. –

+0

@RinkuSarangi 당신은 환영합니다 – nu11p01n73R

0
sed -n ':cycle 
    $!N 
    s/^\([^[:blank:]]*\)\([[:blank:]]\{1,\}.*\)\n\1[[:blank:]]\{1,\}/\1\2,/;t cycle 
    P 
    s/.*\n//;t cycle' YourFile 

가 홀드 버퍼를 사용하지 않으려 고 노력 (그리고 메모리에 전체 파일을로드하지 않음) - 라인 로드 - 첫 번째 단어가 같은 경우를 CR 다음에 CR을 입력하고 CR을 첫 번째 문자로 바꾸고 , - 사례가있는 경우 라인로드시 다시 시작 - 첫 번째 줄 인쇄 - 처음까지 현재 버퍼 교체 \n 아무 것도 입력하지 않음 - 라인 로딩

posix 버전이므로 --posix on GNU sed

관련 문제