正在尝试将linux shell脚本循环转换为Windows+;GnuWin32
编辑以删除“cat”命令的不必要使用… 我有一个Linux shell脚本,它从CSV文件中读取数据,并根据文件中每行的最后一列执行操作 输入文件具有以下基本格式:正在尝试将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
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
。