从每个单元格中删除剩余的字符

时间:2014-01-17 19:02:17

标签: shell unix sed

enter image description here

我有一个包含多个字段和多行的文件,如下所示:

111          768            359 

0|1:1:0,1,0  1|1:2:0,0,1    0|1:1:0,1,0 

1|1:2:0,0,1  0|1:1:0,1,0    0|0:0:1,0,0 

0|0:0:1,0,0  1|1:2:0,0,1    1|1:2:0,0,1 

在每个单元格中,我只想保留前三个字符,以便输出如下所示:

111 768 359 

0|1 1|1 0|1 

1|1 0|1 0|0 

0|0 1|1 1|1

基本上我想要的是从每个'单元'中删除剩余的字符。我怎样才能做到这一点?希望问题很清楚。如果没有,请告诉我,我会尝试解释更多

感谢。

2 个答案:

答案 0 :(得分:2)

使用awk你可以这样做:

awk '{for (i=13;i<=NF;i++) $i=substr($i,1,3)} 1' file
111 768 359
0|1 1|1 0|1
1|1 0|1 0|0
0|0 1|1 1|1

更新符合12th row and 10th field onwards要求:

awk 'NR>10{for (i=13;i<=NF;i++) $i=substr($i,1,3)} 1' file

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed -r '12,$s/(\S{3})\S*(\s)*/\1\2/10g' file

如果您想保留空白区域:

sed -r '12,$s/(\S{3})\S*/\1/10g' file