2014-04-15 5 views
0

mysql 테이블의 이름과 해당 열 이름을 포함하는 파일 하나가 있습니다. 나는 형식을열을 bash 스크립트의 행으로 변환합니다.

파일을 다음으로 변환 할 :

Table Name  | Column Name 
    ABC   | 123 
    ABC   | 345 
    XYZ   | 111 
    FFF   | 222 
    FFF   | 333 
    FFF   | 4444 

출력이

ABC(123,345) 
XYZ(111) 
FFF(222,333,4444) 

나에게 몇 가지 예를 제시하시기 바랍니다해야 example.txt.

+2

을 제거 지금까지 무엇을 시도 했습니까? 이 사이트에서 관련 답변을 찾는 것이 복잡한 것은 아니라고 확인 했습니까? – fedorqui

+0

당신이 나에게 제안 해 줄 수있는 유용한 도움을 찾지 못했습니다 – Rups

답변

3
$ cat t.awk 
#!/usr/bin/awk -f 

BEGIN { FS="[ \t|]+" } 
NR>1 { a[$1]=a[$1]$2"," } 
END { 
    for (i in a) 
     printf "%s(%s)\n", i, substr(a[i], 0, length(a[i])-1) 
} 

$ ./t.awk example.txt 
ABC(123,345) 
XYZ(111) 
FFF(222,333,4444) 
+0

고맙습니다. – Rups

2

이 같은 일부 :

awk -F"[ \t|]+" 'NR>2 {printf f==$1?"":")\n"} NR>1{printf (f==$1?","$2:$1"("$2)} {f=$1} END {print ")"}' file 
ABC(123,345) 
XYZ(111) 
FFF(222,333,4444) 
+2

이것은 좋은 해결책입니다. 그러나 첫 번째 열의 모든 키가 연속적으로 나타나는 것으로 가정합니다. 이것이 유효한 가정이라는 것은 분명하지 않다. –

0
(4.0 이상)

순수 배쉬 :

declare -A name      # associative array 

while read a b c; do 
    name[$a]="${name[$a]},$c" 
done < <(tail -n+2 "$infile")  # skip first line 

for nm in ${!name[@]}; do 
    echo "$nm(${name[$nm]#,})"  # remove leading comma 
done 

매개 변수 대체가 주요 쉼표