对于上下文,我有以下 Linux shell 脚本:
#!/bin/sh
. /database/config/db2inst1/sqllib/db2profile
db2 connect to AMDB user db2inst1
# Get all tables
tables=$(db2 -x "select distinct tabname from syscat.columns where tabschema='DB2INST1'")
# Loop through each table
for tabname in $tables; do
tempcsv="csv/$tabname-temp.csv"
# Export data to csv, then replace consecutive delims with "null"
# Certain tables require special processing due to the data contained within
tempdatacsv="csv/$tabname-data.csv"
if [ "$tabname" = "table1" ] || [ "$tabname" = "table2" ]; then
db2 "export to $tempdatacsv of del modified by coldel| select * from DB2INST1.$tabname"
awk -v RS='"([^"]|"")*"' -v ORS= '{gsub(/\n/,"<db2-br>",RT); gsub(/\|\|/, "<db2-or>", RT); print $0 RT}' $tempdatacsv > $tempcsv
rm -f $tempdatacsv
sed -i 's/||/|\"null\"|/g;s/||/|\"null\"|/g;s/|$/|\"null\"/g' $tempcsv
else
db2 "export to $tempdatacsv of del select * from DB2INST1.$tabname"
awk -v RS='"([^"]|"")*"' -v ORS= '{gsub(/\n/,"<db2-br>",RT); gsub(/,,/, "<db2-dc>", RT); print $0 RT}' $tempdatacsv > $tempcsv
rm -f $tempdatacsv
sed -i 's/,,/,\"null\",/g;s/,,/,\"null\",/g;s/,$/,\"null\"/g' $tempcsv
fi
finalcsv="csv/$tabname.csv"
if [ "$(tail -c 1 $tempcsv | wc -l)" = 1 ]; then
head -c -1 $tempcsv > $finalcsv;
rm -f $tempcsv
else
mv $tempcsv $finalcsv
fi
done
此脚本将 DB2 数据库的每个表中的数据导出到 CSV 文件。
我正在尝试将此 Linux shell 脚本转换为 Windows 批处理文件,但我在使用
awk
和 sed
命令时遇到困难,因为我无法假设运行批处理文件的计算机已安装 GNU Windows。
有没有办法复制
awk
和 sed
命令正在执行的操作,而不在 Windows 中使用这些命令?
我建议改用PowerShell。它有许多字符串操作函数。例如,这里解释了它们 powershell-字符串
对于bat,SED有几种答案。请看这里: windows-cmd-equivalent-of-sed-command 如何在 Windows 上进行类似 sed 的操作
还有 AWK: windows 批处理脚本中的 awk 等效项