2010-07-21 4 views
1

I은 ​​예를 위해 .. 이런 파일을 가지고어떻게하면 유닉스 명령을 사용하여 현명한 행에 텍스트 파일의 열을 인쇄 할 수 있습니까?

number,dac,amountdac,expdate,0 
1111,1,0.000000,2010-07-21,0 
1111,2,0.000000,2010-07-21,0 
1111,3,0.000000,2010-07-21,0 
1111,4,0.000000,2010-07-21,0 
1111,5,0.000000,2010-07-21,0 
1111,6,0.000000,2010-07-21,0 
1111,7,0.000000,2010-07-21,0 
1111,8,0.000000,2010-07-21,0 
1111,9,0.000000,2010-07-21,0 
1111,10,0.000000,2010-07-21,0 
2222,1,50.000000,2010-07-21,0 
2222,2,0.000000,2010-07-21,0 
2222,3,0.000000,2010-07-21,0 
2222,4,0.000000,2010-07-21,0 
2222,5,0.000000,2010-07-21,0 
2222,6,0.000000,2010-07-21,0 
2222,7,0.000000,2010-07-21,0 
2222,8,10.000000,2010-07-21,0 
2222,9,0.000000,2010-07-21,0 
2222,10,0.000000,2010-07-21,0 
3333,1,0.000000,2010-07-21,0 
3333,2,0.000000,2010-07-21,0 
3333,3,0.000000,2010-07-21,0 
3333,4,0.000000,2010-07-21,0 
3333,5,0.000000,2010-07-21,0 
3333,6,0.000000,2010-07-21,0 
3333,7,0.000000,2010-07-21,0 
3333,8,0.000000,2010-07-21,0 
3333,9,200.000000,2010-07-21,0 
3333,10,50.000000,2010-07-21,0 

은이 같은 출력을 원하는 1 열의 개수 dac10 모든 DAC1 대한 동일하다. 헤더 나는 당신의 참조를 위해 주었다. 원본 파일에 헤더가 없습니다.

number,dac1,dac2,dac3,dac4,dac5,dac6,dac7,dac8,dac9,dac10,amountdac1,amountdac2,amountdac3,,amountdac4,amountdac5,amountdac6,amountdac7,amountdac8,amountdac9,,amountdac10,expdate1,expdate2,expdate3,expdate4,expdate5,expdate6,expdate7,expdate8,expdate9,expdate10,0 
1111,1,2,3,4,5,6,7,8,9,10,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,0 
2222,1,2,3,4,5,6,7,8,9,10,50.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,10.000000,0.000000,0.000000,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,0 
3333,1,2,3,4,5,6,7,8,9,10,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,200.000000,50.000000,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,2010-07-21,0 

답변

0

당신은 그 헤어 파이썬 스크립트를 작성할 수 있습니다 : 당신이 나보다 그것을 더 손쉬운 있다면

numbers = [] 
dacs = [] 
amountdacs = [] 
expdates = [] 
for row in text: 
    number, dac, amountdac, expdate, zero = row.split(',') 
    numbers.append(number) 
    dacs.append(dac) 
    amountdacs.append(amountdac) 
    expdates.append(expdate) 
# print things out however you want them 

당신은 아마, 펄 비슷한 일을 할 수 있습니다.

+0

죄송합니다. 저는 python을 모르지만, 나는 perl에 대한 지식이 있습니다. 하지만 유닉스에서 이것을 깨는 법을 모르겠습니다. 귀하의 제안에 감사드립니다 – gyrous

0

기본적으로 아이디어는 데이터를 조 변경해야한다고 생각합니다. stackoverflow has a similar question with a very good solution

에만 작업 왼쪽은 u는 한 번에 즉, 데이터의 덩어리, 10 행 을

  • 에 스크립팅 기술을 사용할 필요가있다.
  • 는 10 행의 첫 번째 열을 제거하고 데이터를

모든 상기 3 단계가 모두 재귀 수행한다 (여기 1,111 또는 2222 또는 3333)

  • 추가 첫번째 열 값을 바꾸어 입력 파일의 행

    솔루션의 절반이 제공되며 간단한 스크립팅으로 나머지를 관리 할 수 ​​있습니다.

  • 2
    awk -F"," '{ 
        a[$1]; 
        b[$1]=b[$1]","$2 
        c[$1]=c[$1]","$3 
        d[$1]=d[$1]","$4 
        e[$1]=e[$1]","$5 } 
    END{ for(i in a){ print i,b[i],c[i],d[i],e[i] } } ' file 
    
    +0

    Ghostdog 잘 작동합니다. 덕분에 많이 .. – gyrous

    +0

    Ghostdog, 하나의 문제가 있습니다. 실제로 주어진 스크립트는 파일의 행 수가 적을 때 잘 동작합니다. 그러나 나는 거의 2 개의 crore 선이있는 파일이있다. 그것은 너무 많은 시간을 소비합니다. 이 문제를 해결할 수 있도록 도와 주 시겠어요? – gyrous