如何使用awk按字母或结束字符分隔字段

时间:2015-04-19 23:34:37

标签: linux bash perl awk grep

我的数据库中有2个字段

ID25333,1429291340lNormPUC-AP_MEX_UFM-GOL_44PUC-AP_VEX_UFM-ROL_55PUCAP_MEX_UFM-DOJ_49
ID55555,1429291340lNormPUC-AP_PPP_UFM-HOL_44PUC-AF_GEX_UJM-SOL_45PUCAP_MEX_UFM-DOJ_59

我需要像这样分开

ID25333,PUC-AP_MEX_UFM-GOL_44     
ID25333,PUC-AP_VEX_UFM-ROL_55
ID25333,PUCAP_MEX_UFM-DOJ_49
ID55555,PUC-AP_PPP_UFM-HOL_44
ID55555,PUC-AF_GEX_UJM-SOL_45
ID55555,PUCAP_MEX_UFM-DOJ_59

具有相同的numbre ID

我使用AWK或grep

awk 'BEGIN{FS="PUC"}{for(i=1;i<=NF;i++)print $(i)}'

任何建议

谢谢!

3 个答案:

答案 0 :(得分:0)

使用GNU awk:

$ awk -F, '{gsub(/PUC/, ","); for (i=3;i<=NF;i++)print $1",PUC"$i}' file.db
ID25333,PUC-AP_MEX_UFM-GOL_44
ID25333,PUC-AP_VEX_UFM-ROL_55
ID25333,PUCAP_MEX_UFM-DOJ_49
ID55555,PUC-AP_PPP_UFM-HOL_44
ID55555,PUC-AF_GEX_UJM-SOL_45
ID55555,PUCAP_MEX_UFM-DOJ_59

或者:

$ awk -F'(,|PUC)' '{for (i=3;i<=NF;i++)print $1",PUC"$i}' file.db
ID25333,PUC-AP_MEX_UFM-GOL_44
ID25333,PUC-AP_VEX_UFM-ROL_55
ID25333,PUCAP_MEX_UFM-DOJ_49
ID55555,PUC-AP_PPP_UFM-HOL_44
ID55555,PUC-AF_GEX_UJM-SOL_45
ID55555,PUCAP_MEX_UFM-DOJ_59

答案 1 :(得分:0)

如果您喜欢awk

awk -F, ' -v OFS=','
{
  id=$1
  split($2,line,"PUC")
  for(i=2;i<=length(line);i++)
    print id,"PUC" line[i]
}'

答案 2 :(得分:0)

使用固定宽度字段的GNU awk:

$ awk -v FIELDWIDTHS="8 15 21 21 21" '{for (i=3;i<=NF;i++) print $1 $i}' file
ID25333,PUC-AP_MEX_UFM-GOL_44
ID25333,PUC-AP_VEX_UFM-ROL_55
ID25333,PUCAP_MEX_UFM-DOJ_49
ID55555,PUC-AP_PPP_UFM-HOL_44
ID55555,PUC-AF_GEX_UJM-SOL_45
ID55555,PUCAP_MEX_UFM-DOJ_59