我正在编写一个批处理脚本,它将调用 .awk 文件来执行查找和替换。
批处理文件脚本.cmd 文件 -->
@gawk -f "%Modify.awk%" "%Temp.csv%" < "%Source.csv%" > "%Output.csv%".
Temp.csv 包含,
| UID | Name | Num | Loc | Addr | Str |95 | Bank| Amal| | Che| | KKKK
来源包含
| 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