日期:2014-05-16 浏览次数:20816 次
#!/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<=NF;i++){if($i=="'$target'" && $(i+1)=='$after_target'){$(i+1)='$to_target';print $0}}}'` if [ "$result" != "" ];then echo "$result" >> $file_c flag=1 fi fi done if [ $flag -eq 0 ];then awk 'NR=='$line_loop' {print $0}' $file_b >> $file_c fi flag=0 done line_b_total=`cat $file_b | wc -l` if [ $line_a -lt $line_b_total ];then for j in `seq $line_a $line_b_total` do awk 'NR=='$j+1' {print $0}' $file_b >> $file_c done fi
------解决方案--------------------
awk 'BEGIN{FS="[ |,]"}NR==FNR{a[$1]=$2}NR>FNR{if($0~/test/ && a[$5]) $5=a[$5];print}' a.txt b.txt