0

我有一个文件被程序搞砸了,现在每一行看起来像这样:

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

(制表符分隔)我需要做的是修改每一行,以便第一列(如果它的格式为 somelengthystring:number)更改为数字(去掉字符串和冒号)

我知道我可以在 awk 中使用 split 来摆脱字符串和冒号,例如:

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

但问题是我不想要第一列。我想要整行,只想修复第一列。唯一的问题是,列太多了,输入 $2,$3, ... 一直到 $35 或其他任何值都是相当愚蠢的。有什么更好的方法来解决这个问题?

4

5 回答 5

1

使用 Perl 你可以这样做:

cat file.txt | perl -pe 's/.*?://'
于 2013-03-11T21:21:19.370 回答
1

如果到目前为止您所拥有的工作,除了 $2, .... 部分:

awk '{
    split(..)
    $1=array[2]
    print
}'
于 2013-03-11T21:23:38.923 回答
1

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

sed 's/^[^:]*://' infile
于 2013-03-11T21:24:04.793 回答
0

使用cut

cut -d: -f2- file.txt

这使用冒号作为分隔符并将所有内容保留在它的右侧。

于 2013-03-11T21:36:10.977 回答
0

如果只更改第一个制表符分隔字段中的格式somelengthystring:number,您可以尝试以下操作:

awk '$1~/:[0-9]*$/{sub(/.*:/,x,$1)}1' FS='\t' OFS='\t' file
于 2013-03-11T22:18:36.427 回答