Windows中的Grep和Awk表达式错误中的无效字符

Nat*_*han 10 windows awk grep gnuwin32

我是grep和awk的新手 - 使用Windows 7(我从GnuWin下载了grep和awk for windows).

我在运行此脚本时遇到问题:

grep -Fwf dictionary.txt frequency.txt | awk '{print $2 "," $1}'
Run Code Online (Sandbox Code Playgroud)

我收到错误:

awk:'{print
awk:^表达式中的无效字符'''

我相信它可能与必须在Windows中使用双引号有关,但我尝试了所有我能想到的组合,但它仍然不起作用.

有人可以帮忙吗?谢谢

Jus*_*ner 23

在Windows上,您需要使用双引号来引用您的awk命令.所以

grep -Fwf dictionary.txt frequency.txt | awk '{print $2 "," $1}'
Run Code Online (Sandbox Code Playgroud)

需要改为

grep -Fwf dictionary.txt frequency.txt | awk "{print $2 "," $1}"
Run Code Online (Sandbox Code Playgroud)

但请记住,你不能在双引号内使用双引号,你需要转义它们.在Windows上,您不能简单地使用\它来逃避它.您需要以下语法:

grep -Fwf dictionary.txt frequency.txt | awk "{print $2 \"",\"" $1}"
Run Code Online (Sandbox Code Playgroud)

对,这是\""代表"双引号内.

  • 实际上这些都不适用于Windows.它应该是'awk'{print $ 2 \",\"$ 1}"` (5认同)

Ben*_*oit 6

转义命令行项始终是Windows的痛苦.作为最后的手段你可以使用gawk -f!

所以:你的文件script.awk包含:

print $2,$1
Run Code Online (Sandbox Code Playgroud)

你也是 grep -Fwf dictionary.txt frequency.txt | awk -f script.awk

  • 我让它工作 - 使用bash脚本,Notepad ++需要在UNIX中编码文件(编辑 - > EOL转换 - > UNIX).非常感谢你的帮助!我最终也使用了Cygwin.非常感谢! (2认同)