试图将linux shell脚本循环转换为Windows + GnuWin32

时间:2013-07-08 17:22:08

标签: shell loops batch-file

编辑删除不必要的“cat”命令使用...

我有一个Linux shell脚本,它从CSV文件中读取数据,并根据文件中每行的最后一列执行操作。

输入文件具有以下基本格式:

asdf,foo
1234,foo
qwerty,bar
zxcv,baz
7890,bar

原始Linux脚本如下所示:

sed s/.*,//g $1 | sort -u | while read item
do
   # Do stuff with $item
done

我很难将Linux脚本转换为在Windows shell环境中使用gnuWin32版本的cat,sed和sort运行。这是我到目前为止所尝试的内容:

for /f "tokens=*" %%A in ('sed s/.*,//g %1 ^| sort -u') do (some stuff with %%A)

当我尝试运行时,我得到:

sed: -e expression #1, char 4: unterminated `s' command
cat: write error: Invalid argument

我确信我误解了有关批处理脚本的一些基本知识。我试图介绍一些像escape sequences这样的基础知识,但我仍然在画一个空白。任何提示?

谢谢你们!

1 个答案:

答案 0 :(得分:2)

试试这个:

for /f "delims=" %%A in ('cat "%~1" ^| sed "s/.*,//g" ^| sort -u') do (some stuff with %%A)

在Windows中,用双引号'替换linux shell脚本"中的单引号。如果在GNUWin命令中需要双引号,则必须使用反斜杠\进行转义 - 但仅限于Windows shell提示符cmd,来自sedawk等的脚本完全兼容。