当前位置: 技术问答>linux和unix
求一批量查找替换脚本
来源: 互联网 发布时间:2016-08-03
本文导语: 有文件a.txt 1100,1234 15000,7890 文件b.txt this is a test 1100 aaa this is a test 11003 aaa other file 215000 ccc 现在有一批象b.txt一样的文件 要求在b同一行出现指定字符"test",并且出现a文件中第一列中的数据,替换成第二列的...
有文件a.txt
1100,1234
15000,7890
文件b.txt
this is a test 1100 aaa
this is a test 11003 aaa
other file 215000 ccc
现在有一批象b.txt一样的文件
要求在b同一行出现指定字符"test",并且出现a文件中第一列中的数据,替换成第二列的相应数据,要求全部匹配
替换后b.txt结果如下
this is a test 1234 aaa
this is a test 11003 aaa
other file 215000 ccc
1100,1234
15000,7890
文件b.txt
this is a test 1100 aaa
this is a test 11003 aaa
other file 215000 ccc
现在有一批象b.txt一样的文件
要求在b同一行出现指定字符"test",并且出现a文件中第一列中的数据,替换成第二列的相应数据,要求全部匹配
替换后b.txt结果如下
this is a test 1234 aaa
this is a test 11003 aaa
other file 215000 ccc
|
awk 'BEGIN{FS="[ |,]"}NR==FNR{a[$1]=$2}NR>FNR{if($0~/test/ && a[$5]) $5=a[$5];print}' a.txt b.txt
|
由于我比较笨 所以写了个比较笨的 如果还没解决 你将就着用一下 要不好用跟我说
#!/bin/bash
file_a=a.txt //你的a.txt文件,如果脚本和它不在一个目录,加上目录
file_b=b.txt //你的b.txt文件,如果脚本和它不在一个目录,加上目录
file_c=c.txt //你最终要得到的文件,如果也要叫b.txt的话,脚本执行完后,mv c.txt b.txt
target=test //要匹配的字符串,比如你上面说的test
flag=0;
line_a=`cat "$file_a" | wc -l`
line=`grep -n "$target" $file_b | awk -F':' '{print $1}'`
for line_loop in `seq 1 $line_a`
do
for line_b in $line
do
if [ $line_loop -eq $line_b ];then
after_target=`awk -F',' 'NR=='$line_b' {print $1}' $file_a`
to_target=`awk -F',' 'NR=='$line_b' {print $2}' $file_a`
result=`awk 'NR=='$line_b' {print $0}' $file_b | awk '{for(i=1;i