现在有以下几个文件
1、a.txt
aa.dat 381263
bb.dat 515821
2、b.dat
CLASS 20120622192745 N GRADE COUNT
3、aa.bat
aa 20120107000000000 19950427000000 20120107000000 01001500
aa 20120107000000000 19950427000000 20120107000000 01001500
aa 20120107000000000 19950427000000 20120107000000 01003640
aa 20120107000000000 19950427000000 20120107000000 01003640
aa 20120107000000000 20060124000000 20120107000000 02080011
aa 20120107000000000 20060124000000 20120107000000 02080011
aa 20120107000000000 20051216000000 20120107000000 02080012
4、bb.dat
bb 20120107000000000 19950427000000 20120107000000 01001500
bb 20120107000000000 19950427000000 20120107000000 01001500
bb 20120107000000000 19950427000000 20120107000000 01003640
bb 20120107000000000 19950427000000 20120107000000 01003640
bb 20120107000000000 20060124000000 20120107000000 02080011
bb 20120107000000000 20060124000000 20120107000000 02080011
bb 20120107000000000 20051216000000 20120107000000 02080012
求一个shell,在a.txt文件中取每个dat对应的数字,替换b.dat文件中的COUNT,再把替换后的b.dat文件内容,加到aa.dat,bb.dat文件的最前面。(文件字段间用tab分割)谢谢大家啊~~~~
生成后的文件:
1、aa.bat
CLASS 20120622192745 N GRADE 381263
aa 20120107000000000 19950427000000 20120107000000 01001500
aa 20120107000000000 19950427000000 20120107000000 01001500
aa 20120107000000000 19950427000000 20120107000000 01003640
aa 20120107000000000 19950427000000 20120107000000 01003640
aa 20120107000000000 20060124000000 20120107000000 02080011
aa 20120107000000000 20060124000000 20120107000000 02080011
aa 20120107000000000 20051216000000 20120107000000 02080012
2、bb.dat
CLASS 20120622192745 N GRADE 515821
bb 20120107000000000 19950427000000 20120107000000 01001500
bb 20120107000000000 19950427000000 20120107000000 01001500
bb 20120107000000000 19950427000000 20120107000000 01003640
bb 20120107000000000 19950427000000 20120107000000 01003640
bb 20120107000000000 20060124000000 20120107000000 02080011
bb 20120107000000000 20060124000000 20120107000000 02080011
bb 20120107000000000 20051216000000 20120107000000 02080012
符合我要求的答案:(谢谢大家的帮忙)
awk '{if(NR==FNR){insert=$0}else{to_insert=insert;sub("COUNT", $2, to_insert);cmd="sed -i \"1i"to_insert"\" "$1;system(cmd)}}' b.dat a.txt
求一个多文件编辑的shell(已解决)
-
- 帖子: 1
- 注册时间: 2010-03-18 13:29
求一个多文件编辑的shell(已解决)
上次由 grufield 在 2012-08-21 21:55,总共编辑 1 次。
- 枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
- 联系:
Re: 求一个多文件编辑的shell
不想写,看着shell好烦啊
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 求一个多文件编辑的shell
+1枫叶饭团 写了:不想写,看着shell好烦啊
- naturalaw
- 帖子: 1360
- 注册时间: 2011-09-06 22:04
Re: 求一个多文件编辑的shell
不是shell烦,数据给得太多了,表述不清楚需求。lilydjwg 写了:+1枫叶饭团 写了:不想写,看着shell好烦啊
- 永恒之法则
- The eternal law
- naturalaw
- 帖子: 1360
- 注册时间: 2011-09-06 22:04
Re: 求一个多文件编辑的shell
3、4里的数据属于干扰数据,我只要一行。
求一个shell,在a.txt文件中取每个dat对应的数字,替换b.dat文件中的COUNT,再把替换后的b.dat文件内容,加到aa.dat,bb.dat文件的最前面。(文件字段间用tab分割)谢谢大家啊~~~~
生成后的文件:
1、a.txt
aa.dat 381263
bb.dat 515821
2、b.dat
CLASS 20120622192745 N GRADE COUNT
3、aa.bat
aa 20120107000000000 19950427000000 20120107000000 01001500
4、bb.dat
bb 20120107000000000 19950427000000 20120107000000 01001500
求一个shell,在a.txt文件中取每个dat对应的数字,替换b.dat文件中的COUNT,再把替换后的b.dat文件内容,加到aa.dat,bb.dat文件的最前面。(文件字段间用tab分割)谢谢大家啊~~~~
生成后的文件:
不过,可能用python好些。1、aa.bat
CLASS 20120622192745 N GRADE 381263
aa 20120107000000000 19950427000000 20120107000000 01001500
2、bb.dat
CLASS 20120622192745 N GRADE 515821
bb 20120107000000000 19950427000000 20120107000000 01001500
- 永恒之法则
- The eternal law
- naturalaw
- 帖子: 1360
- 注册时间: 2011-09-06 22:04
Re: 求一个多文件编辑的shell
[bash]#!/bin/bash
unset fn;for i in `awk '{print $1}' a.txt`;do fn=(${fn[@]} $i) ;done
unset nu;for i in `awk '{print $2}' a.txt`;do nu=(${nu[@]} $i) ;done
total=${#nu[@]}
end=`expr $total - 1`
for i in `seq 0 $end`;do
echo $i ${fn[$i]}
sed -i "1iCLASS 20120622192745 N GRADE ${nu[$i]}" ${fn[$i]}
echo $i
done
exit 0
[/bash]
坑人,居然 不是等宽字体!
unset fn;for i in `awk '{print $1}' a.txt`;do fn=(${fn[@]} $i) ;done
unset nu;for i in `awk '{print $2}' a.txt`;do nu=(${nu[@]} $i) ;done
total=${#nu[@]}
end=`expr $total - 1`
for i in `seq 0 $end`;do
echo $i ${fn[$i]}
sed -i "1iCLASS 20120622192745 N GRADE ${nu[$i]}" ${fn[$i]}
echo $i
done
exit 0
[/bash]
坑人,居然 不是等宽字体!
- 永恒之法则
- The eternal law