击:如何更改文件的第一列,只有第一列
问题描述:
我有一个由程序搞砸了,现在每行看起来是这样的文件:击:如何更改文件的第一列,只有第一列
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或其它任何东西都是非常愚蠢的。有什么更好的方法来解决这个问题?
答
使用sed
。从行首(^
)删除所有字符,直到第一个冒号。
sed 's/^[^:]*://' infile
答
使用Perl,你可以这样做:
cat file.txt | perl -pe 's/.*?://'
答
如果你有什么工作,到目前为止,除了$ 2,....部分:
awk '{
split(..)
$1=array[2]
print
}'
答
如果只在第一制表符分隔的领域格式somelengthystring:number
应该改变,你可以试试这个:
awk '$1~/:[0-9]*$/{sub(/.*:/,x,$1)}1' FS='\t' OFS='\t' file
不* somelongstring *有它的空间? – 2013-03-11 21:22:08
可能。据我所知,不,它不应该。但该文件大小约为500MB,因此无法检查每一行。 – Joe 2013-03-11 21:23:11
如果它有空间或冒号,它可能会变得毛茸茸的。我在想如何处理这些案件。 – 2013-03-11 21:26:06