无需 GNU Windows 将 awk 和 sed 命令转换为 Windows 批处理

问题描述 投票:0回答:1

对于上下文,我有以下 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 中使用这些命令?

batch-file awk sed
1个回答
0
投票

我建议改用PowerShell。它有许多字符串操作函数。例如,这里解释了它们 powershell-字符串

对于bat,SED有几种答案。请看这里: windows-cmd-equivalent-of-sed-command 如何在 Windows 上进行类似 sed 的操作

还有 AWK: windows 批处理脚本中的 awk 等效项

© www.soinside.com 2019 - 2024. All rights reserved.