[问题]再次紧急求助

sh/bash/dash/ksh/zsh等Shell脚本
回复
coldweb
帖子: 45
注册时间: 2008-03-22 1:19
联系:

[问题]再次紧急求助

#1

帖子 coldweb » 2008-06-02 11:47

文件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
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#2

帖子 bones7456 » 2008-06-02 11:52

viewtopic.php?p=752007&highlight=#752007

这个也是你发的吧? 发了就走人了...
用 awk 可以实现,自己研究吧.
关注我的blog: ε==3
coldweb
帖子: 45
注册时间: 2008-03-22 1:19
联系:

#3

帖子 coldweb » 2008-06-02 11:54

是的,但是情况不一样阿,大哥,我在线救急阿!!!
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

#4

帖子 xiooli » 2008-06-02 12:57

代码: 全选

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:
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

#5

帖子 millenniumdark » 2008-06-02 16:48

從例子看是唯一的哦。那直接查找替換就可以挖。
头像
fatcat
帖子: 10
注册时间: 2008-06-11 14:13

#6

帖子 fatcat » 2008-06-14 8:45

创建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的位置不能调换,且这两个文件的结尾没有空白行
回复