Пожалуйста, смотрите ниже сценарий - на этом

nawk 'NR==FNR { a[$1]=$2 ; next} {for ( i in a) gsub(i,a[i])}1' file.dat 1.txt

1.txt

ioiufeioru
dfoiduf
MO_CIF_INP438
fjkdj MO_CIF_INP
dsjhdf BP_LINKED_TETES
dehdueuh MO_INP_BPRESP

file.dat

MO_CIF_INP TRO_MO_CIF_INP

BP_LINKED_TETES TRO_BP_LINKED_TETES

MO_BPID TRO_MO_BPID

MO_INP_BPRESP TRO_MO_INP_BPRESP

и мой вывод для приведенного выше сценария

ioiufeioru
dfoiduf
TRO_MO_CIF_INP438
fjkdj TRO_MO_CIF_INP
dsjhdf TRO_BP_LINKED_TETES
dehdueuh TRO_MO_INP_BPRESP

Мое намерение состоит в том, чтобы заменить только совпадающее слово, но не все в приведенном выше случае. MO_CIF_INP438 также заменяется. Как мы можем использовать поиск по слову? Я пробовал ниже случай, но не работает

1.

nawk 'NR==FNR { a[$1]=$2 ; next} {for ( i in a) gsub(/i/,a[i])}1' file.dat 1.txt


TRO_BP_LINKED_TETESoTRO_BP_LINKED_TETESufeTRO_BP_LINKED_TETESoru
dfoTRO_BP_LINKED_TETESduf
MO_CIF_INP438
fjkdj MO_CIF_INP
dsjhdf BP_LINKED_TETES
dehdueuh MO_INP_BPRESP

2.

nawk 'NR==FNR { a[$1]=$2 ; next} {for ( i in a) gsub(\<i\>,a[i])}1' file.dat 1.txt
nawk: syntax error at source line 1
 context is
        NR==FNR { a[$1]=$2 ; next} {for ( i in a) >>>  gsub(\ <<< <i\>,a[i])}1
nawk: illegal statement at source line 1

1 ответ1

2

Вы можете попробовать что-то вроде:

awk '

# Read entire file.dat in an array indexed at column1 having value of column2

NR==FNR { 
    a[$1]=$2; 

# Skip the next action statements until file.dat is completely stored

    next 
}

# For each index element of array

{
    for(i in a) { 

# Iterate over each values of line from 1.txt file

        for(x=1;x<=NF;x++) {

# If an exact match is found replace it with array element else leave it as is. 

            $x=(i==$x)?a[i]:$x
            }
        }
}1' file.dat 1.txt

$ head file.dat 1.txt 
==> file.dat <==
MO_CIF_INP TRO_MO_CIF_INP

BP_LINKED_TETES TRO_BP_LINKED_TETES

MO_BPID TRO_MO_BPID

MO_INP_BPRESP TRO_MO_INP_BPRESP

==> 1.txt <==
ioiufeioru
dfoiduf
MO_CIF_INP438
fjkdj MO_CIF_INP
dsjhdf BP_LINKED_TETES
dehdueuh MO_INP_BPRESP

$ awk '              
  NR==FNR { 
      a[$1]=$2; 
      next 
  }
  {for(i in a) { 
      for(x=1;x<=NF;x++) {
          $x=(i==$x)?a[i]:$x
          }
      }
  }1' file.dat 1.txt
ioiufeioru
dfoiduf
MO_CIF_INP438
fjkdj TRO_MO_CIF_INP
dsjhdf TRO_BP_LINKED_TETES
dehdueuh TRO_MO_INP_BPRESP

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .