Найти и заменить всю строку исходного файла

Я работаю над пакетным сценарием, который будет вызовите файл .awk для выполнения поиска и замены.

  1. пакетный файл script.cmd файл ->

     @gawk -f "% Modify.awk%" "% Temp.csv%" <"% Source. csv% ">"% Output.csv% ". 
     
  2. Temp.csv содержит,

     | UID | Name | Num | Loc | Addr | Str 
     | 95 | Bank | Amal | | Che | | KKKK 
     
  3. Источник содержит

     | UID | Name | Num | Loc | Addr | Str 
     | 34 | Per | ffff | hhhh | kkkk | llll | KKKK 
     | 95 | Банк | ffff | hhhh | XXXX | YYYY | LLLL 
     | 100 | Hel | Join | JJJJ | HHHH 
     

После выполнения пакетного сценария я хочу иметь вывод, как показано ниже (т.е.) значение временного файла должно быть заменено в исходном.

Вывод:

| UID | Name | Num | Loc | Addr | Str
|34 | Per | ffff | hhhh | kkkk | llll | KKKK
|95 | Bank| Amal| | Che| | KKKK
|100 | Hel | Join | JJJJ | HHHH

Modify.awk:

BEGIN{
#
# Define field separator
#
  FS="\t";
  OFS="\t";
}
{
  /^95/
    {
     getline 
     print $1
     }
}
END{
#  print "NReject: ",NReject," on a total of: ",NR-1;
}

ПРИМЕЧАНИЕ: Временный и исходный файл - это поля файла .csv, разделенные значением табуляции

0
задан 19 July 2021 в 15:46

1 ответ

Я бы создал сценарий sed для замены вашего временного файла, потому что sed предназначен для этой задачи. Awk лучше в других вещах.

например: создайте файл rep.sed с командами замены, чтобы найти и заменить строки, начинающиеся с 95, которые вы можете использовать:

s/^|95.*/|95 | Bank| Amal| | Che| | KKKK/g

затем запустите sed в исходном коде

sed -f rep.sed sourcefile

Передайте вывод по конвейеру в новый файл, когда он работает

sed -f rep.sed sourcefile > updatedsourcefile

добавление других строк в rep.sed выполнит все замены за один проход

s/^|95.*/|95 | Bank| Amal| | Che| | KKKK/g
s/^|100.*/|100 | Bank| Amal| | Che| | LLLL/g
1
ответ дан 28 July 2021 в 11:17

Другие вопросы по тегам:

Похожие вопросы: