2013-03-11 44 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 *有它的空間? – 2013-03-11 21:22:08

+0

可能。據我所知,不,它不應該。但該文件大小約爲500MB,因此無法檢查每一行。 – Joe 2013-03-11 21:23:11

+0

如果它有空間或冒號,它可能會變得毛茸茸的。我在想如何處理這些案件。 – 2013-03-11 21:26:06

回答

0

使用sed。從行首(^)刪除所有字符,直到第一個冒號。

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

使用Perl,你可以這樣做:

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

如果你有什麼工作,到目前爲止,除了$ 2,....部分:

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

使用cut

cut -d: -f2- file.txt 

這將使用冒號作爲分隔符,並保留一切它的右側。

0

如果只在第一製表符分隔的領域格式somelengthystring:number應該改變,你可以試試這個:

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