分页: 1 / 1

[问题]再次紧急求助

发表于 : 2008-06-02 11:47
coldweb
文件file01
内容:
030719212037 AXI 21.747080 -8.680000 111.230003 56.200001
030719212037 bat 24.227308 -8.680000 111.230003 56.200001
030719212037 bat 21.720179 -8.680000 111.230003 56.200001
030719212037 BAT 24.004793 -8.680000 111.230003 56.200001
030719212037 bas 23.678419 -8.680000 111.230003 56.200001
030719212037 bda 24.820730 -8.680000 111.230003 56.200001
文件file02
内容:
1 AXI 32.00000 104.00000 0.57000
2 AXY 31.63800 104.43110 0.58700
3 bas 30.06076 96.91444 3.28700
4 bat 30.00570 99.07040 2.62000
5 BAT 30.01000 99.12000 2.62000
6 bda 30.20050 97.31140 4.09400
我想把file01里的第二字段换成file02里规定的序号
例如030719212037 AXI 21.747080 -8.680000 111.230003 56.200001
换成:030719212037 1 21.747080 -8.680000 111.230003 56.200001
处理结果如下
030719212037 1 21.747080 -8.680000 111.230003 56.200001
030719212037 4 24.227308 -8.680000 111.230003 56.200001
030719212037 4 21.720179 -8.680000 111.230003 56.200001
030719212037 5 24.004793 -8.680000 111.230003 56.200001
030719212037 3 23.678419 -8.680000 111.230003 56.200001
030719212037 6 24.820730 -8.680000 111.230003 56.200001

发表于 : 2008-06-02 11:52
bones7456
viewtopic.php?p=752007&highlight=#752007

这个也是你发的吧? 发了就走人了...
用 awk 可以实现,自己研究吧.

发表于 : 2008-06-02 11:54
coldweb
是的,但是情况不一样阿,大哥,我在线救急阿!!!

发表于 : 2008-06-02 12:57
xiooli

代码: 全选

z=`cat ./file02 |awk '{print $1$2}'`;cat ./file01 |while read l;do x=`echo $l |awk '{print $2}'`;y=`echo $z |sed "s/$x.*//;s/^.*\ //g"`;echo $l| sed "s/$x/$y/";done >newfile
很糟糕的一个方法,大家表笑哦 :oops:

发表于 : 2008-06-02 16:48
millenniumdark
從例子看是唯一的哦。那直接查找替換就可以挖。

发表于 : 2008-06-14 8:45
fatcat
创建proc.awk

代码: 全选

{
        if($6==""){
                a[$2]=$1
        }
        else{
                print $1,a[$2],$3,$4,$5,$6
        }
}
执行命令:

代码: 全选

cat file02 file01 | awk -f proc.awk
注意file02与file01的位置不能调换,且这两个文件的结尾没有空白行