2013-03-11 3 views
0

내가 프로그램에 의해 망쳐 지금은 모든 라인이 같은 모양 된 파일이 있습니다배쉬 : 파일의 첫 번째 열 및 첫 번째 열을 변경하는 방법

somelongstring:number number number number ... a lot more columns 

(탭으로 구분)를 내가해야 할 일은 모든 줄을 수정하여 첫 번째 열이 somelengthystring : number 형식으로되어 있으면 번호로 바꾼다. (문자열과 콜론을 제거한다.)

내가 사용할 수 있음을 알고있다. 문자열과 콜론을 없애기 위해 awk로 분할하십시오 :

awk '{ 
    split($1,array,":") 
} 
END{ 
    print array[2],$2,$3... 
}' 

하지만 첫 번째 열만 있으면 좋을 것입니다. 전체 줄을 원하고 첫 번째 열을 고정시키고 싶습니다. 유일한 문제는 $ 2, $ 3, ... $ 35 또는 그 밖의 모든 것을 입력하는 것이 어리석은 열이 너무 많다는 것입니다. 이 문제를 해결하는 더 좋은 방법은 무엇입니까? 당신이 할 수있는 펄을 사용하여

+0

* somelongstring * 거기에 공간이 있습니까? –

+0

가능합니다. 내가 말할 수있는 한, 안된다. 그렇게해서는 안된다. 그러나 파일 크기는 약 500MB이므로 모든 행을 검사 할 수는 없습니다. – Joe

+0

공백이나 콜론이 있으면 털이 나올 수 있습니다. 나는 그 사건들을 다루는 방법을 생각하려고 노력하고있다. –

답변

0

sed 사용. 첫 번째 콜론까지 줄의 처음부터 모든 문자를 제거하십시오 (^). 이 구분자로 콜론을 사용하고 그것의 오른쪽에 모든 것을 유지 cut

cut -d: -f2- file.txt 

사용

sed 's/^[^:]*://' infile 
1

:

cat file.txt | perl -pe 's/.*?://' 
1

당신은 $ 2를 제외하고, 지금까지의 작품이 무엇인지, .... 일부 경우

awk '{ 
    split(..) 
    $1=array[2] 
    print 
}' 
0

. 첫 번째 탭으로 구분 된 필드의 형식 만 somelengthystring:number 변경해야하는 경우

0

, 당신이 시도 할 수 :

awk '$1~/:[0-9]*$/{sub(/.*:/,x,$1)}1' FS='\t' OFS='\t' file