2012-09-13 6 views
2

파일 하나 하나에 쉼표로 구분 된 값 목록이 있습니다.bash에서 CSV 파일을 변환하는 방법?

1 a 
1 b 
1 c 
1 d 
1 e 
2 x 
2 y 
2 z

어떻게 shell (bash) 스크립트 그것을 할 : 예를 들어, 다음과 같이 이제

1, a, b, c, d, e 
2, x, y, z

나는 bash에 변환 하시겠습니까?

답변

7
awk -F, '{for(i=2;i<=NF;i++)print $1,$i}' temp 

아래 테스트 :

> cat temp 
1, a, b, c, d, e 
2, x, y, z 
> awk -F, '{for(i=2;i<=NF;i++)print $1,$i}' temp 
1 a 
1 b 
1 c 
1 d 
1 e 
2 x 
2 y 
2 z 
1

쉘 스크립트가 필요하다는 것을 알고 있지만 bash 일 필요가 있습니까? 예 : 일반적으로 더 높은 수준의 스크립팅 언어와 CSV 라이브러리를 사용합니다. 예 : PerlText::CSV

+0

나는 (심지어 자바와 같은 비 스크립트 언어에 대한) 모든 CSV 라이브러리를 생각하지 않는 상자에서이 사용 사례를 해결할 수있는,이의 이상한 방법으로 CSV 데이터를 처리하고 있으며 그 데이터는 실제 CSV가 아닙니다. 부수적으로, 당신의 대답에서 Perl은 일종의 "쉘 스크립트"라는 것을 이해할 수 있습니다. –

+0

왜 Downvoted? 더 높은 수준의 스크립팅 언어와 CSV 지향 라이브러리를 제안하는 것이 비합리적인 것처럼 보이지 않습니다. –

+0

위의 내용은 "실제 CSV조차도 아닙니다"? –

1

당신은 토큰에 라인을 분할하고 배열에 넣어 수 있습니다. 배열의 첫 번째 요소는 숫자를 가지며, 귀하의 경우 1 또는 2 등입니다. 이런 식으로 뭔가를 할 수있다 :

while read line 
do 
    arrIN=(${line//,/ }) 

## make a loop and echo them 
## arrIN[0] will have the initial number 

done < $file 

# $file is the input file you are reading 
관련 문제