正在尝试将linux shell脚本循环转换为Windows+;GnuWin32

正在尝试将linux shell脚本循环转换为Windows+;GnuWin32,shell,loops,batch-file,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 she

编辑以删除“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
我肯定我误解了批处理脚本的一些基本内容。我试图涵盖一些基础知识,如,但我仍然是空白。有什么提示吗

谢谢大家

试试这个:

for/f“delims=“%%A in('cat“%~1”^ sed“s/*,//g”^ sort-u')do(一些带有%%A的内容)

在Windows中,将linux shell脚本中的单引号替换为双引号
。如果在GNUWin命令中需要双引号,则必须使用反斜杠
\
-对其进行转义-但仅在Windows shell提示符
cmd
上,
sed
awk
等中的脚本是完全兼容的。

您能提供一组CSV记录样本(产生您列出的错误)吗?@jubbandersnatch,刚刚更新过。谢谢你知道
猫$1 |..
被认为是不好的形式吗?Sed应该使用一个文件(列表)作为尾随参数,即
Sed's/x/y/g'f1 f2…
。另外,您通常希望将内联脚本传递给sed,如图所示,在单引号内,或者将其放入一个文件中,并像
sed-f mySedScript.sed f1 f2…
那样调用它。祝你好运。谢谢@Sheller,非常好的反馈!我将相应地更新Linux脚本。当我引用给sed的命令时,我没有得到错误。这个cmd消除了cat命令,尽管据我所知它对任何错误都不负责:
for/f“tokens=*”%%A in('sed“s/*,//g”“%~1”^ sort-u')do@echo%%A
。另外,确保您使用的是GNU sort,而不是Windows附带的sort.exe。看起来像
for/f“delims=“%%A in('sed“s/*,///g”%1^ | sort-u')do(一些带有%%A)的东西也可以用。
。。。谢谢对于/f“delims=“%%A in('sed“s/*,//g”“%~1”^ sort-u')do(使用%%A的某些内容),您最好使用
。是的,
cat
不是必需的。顺便说一句,
cat
Windows
命令是
type