如何用文件中的另一个单词替换以某词结尾的单词

时间:2019-06-09 12:11:52

标签: if-statement awk

我有一个名为sendry.tmp的文件,具有结构

8272275 docliente_up/ant_aux_secciones_mes2 556321
8272276 docliente_up/ant_aux_ufcp_mes1  556322
8272278 docliente_up/ant_aux_ufcp_mes2  556324
8272460 docliente_up/jmn_sms_sevilla    556471
8837577 docliente_bu/do_acumulacion/fecha=20190502  550972
8837578 docliente_tres/do_acumulacion/fecha=20190524    550972
8837579 docliente/do_acumulacion/fecha=20190503 550972

我喜欢在第二列开头的以databases结尾的单词之前添加单词_up/,其余的以databases_users开头的单词。

类似这样的东西:

8272275 databases/docliente_up/ant_aux_secciones_mes2   556321
8272276 databases/docliente_up/ant_aux_ufcp_mes1    556322
8272278 databases/docliente_up/ant_aux_ufcp_mes2    556324
8272460 databases/docliente_up/jmn_sms_sevilla  556471
8837577 databases_users/docliente_bu/do_acumulacion/fecha=20190502  550972
8837578 databases_users/docliente_tres/do_acumulacion/fecha=20190524    550972
8837579 databases_users/docliente/do_acumulacion/fecha=20190503 550972

我有一个文件,其名称为第二列的第一个单词。

$cat init.txt
 docliente_up
 docliente_bu
 docliente_tres
 docliente

我使用了这段代码,但找不到解决方法。

for i in `awk '{print $2}' $wkdir/init.txt`
 do 
if  [[ "$i" == *_up ]]
 then 
  awk -v basedatos=$i '{gsub(/$basedatos/,"databases/$basedatos");}1' sentry.tmp >sentry.new
 else 
  awk -v basedatos=$i '{gsub(/$basedatos/,"databases_users/$basedatos");}1' sentry.tmp >>sentry.new
 fi
done

2 个答案:

答案 0 :(得分:0)

请您尝试以下。

awk '{$2=$2 ~ /_up\//?"databases/"$2:"databases_users/"$2} 1' Input_file

答案 1 :(得分:0)

$ awk '{$2 = "databases" ($2 ~ "_up/" ? "" : "_users") "/" $2} 1' file
8272275 databases/docliente_up/ant_aux_secciones_mes2 556321
8272276 databases/docliente_up/ant_aux_ufcp_mes1 556322
8272278 databases/docliente_up/ant_aux_ufcp_mes2 556324
8272460 databases/docliente_up/jmn_sms_sevilla 556471
8837577 databases_users/docliente_bu/do_acumulacion/fecha=20190502 550972
8837578 databases_users/docliente_tres/do_acumulacion/fecha=20190524 550972