查找并替换源文件的整行

查找并替换源文件的整行

我正在编写一个批处理脚本,它将调用 .awk 文件来执行查找和替换。

  1. 批处理文件脚本.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 | Bank| 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

修改.awk:

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

注意:临时文件和源文件是用 Tab 值分隔的 .csv 文件字段

答案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

相关内容