How to cut field in awk

Viewed 129

I want to write script file to cut field and then use it to compare the field then print ex: My input file

ADC1/asf/sd/df_adc1/125125
AED1/asf/sd/df_aed1/asfk
ASQ2/asf/df_asq2/aks
ABX5/df_abx5/asf/sd/sdgqw

Output file: The last field will print from beginning to the field have same the first but not capitalized. I will compare the first field and then find the word and print from begin to the word I had compare.

ADC1/asf/sd/df_adc1/125125     ADC1   ADC1/asf/sd/df_adc1
AED1/asf/sd/sf_aed1/asfk   AED1   AED1/asf/sd/sf_aed1
ASQ2/asf/dg_asq2/aks    ASQ2   ASQ2/asf/dg_asq2
ABX5/da_abx5/asf/sd/sdgqw  ABX5   ABX5/da_abx5

I had use awk to split :

awk '{split($1,a,"/"); {print $1, a[1]}}' input > output

and the output like that

ADC1/asf/sd/df_adc1/125125  ADC1
AED1/asf/sd/df_aed1/asfk   AED1
ASQ2/asf/df_asq2/aks      ASQ2   
ABX5/df_abx5/asf/sd/sdgqw  ABX5

but i dont know how to compare to make last field

1 Answers

With your shown samples, please try following awk program.

awk '
BEGIN{ FS=OFS="/" }
{
  val=""
  for(i=1;i<=NF;i++){
    if(i>1 && index(tolower($i),tolower($1))){
      print $0" "$1" "val OFS $i
    }
    val=(val?val OFS:"")$i
  }
}
'  Input_file

Explanation: Adding detailed explanation for above solution.

awk '                            ##Starting awk program from here.
BEGIN{ FS=OFS="/" }              ##Setting FS and OFS as / here.
{
  val=""                         ##Nullifying val here.
  for(i=1;i<=NF;i++){            ##Traversing through all fields here.
    if(i>1 && index(tolower($i),tolower($1))){  ##Checking if field is greater than 1 and  $1 is found in $i(current field) in case-insensitive mode then do following.
      print $0" "$1" "val OFS $i ##Printing current line first field val OFS and current field.
    }
    val=(val?val OFS:"")$i       ##Creating val which has val and current field value in it.
  }
}
'  Input_file                    ##Mentioning Input_file name here.
Related