击:如何更改文件的第一列,只有第一列

问题描述:

我有一个由程序搞砸了,现在每行看起来是这样的文件:击:如何更改文件的第一列,只有第一列

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

使用sed。从行首(^)删除所有字符,直到第一个冒号。

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

使用Perl,你可以这样做:

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

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

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

使用cut

cut -d: -f2- file.txt 

这将使用冒号作为分隔符,并保留一切它的右侧。

如果只在第一制表符分隔的领域格式somelengthystring:number应该改变,你可以试试这个:

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