'gawk -v RS='"' '... 不是包含RS='"' 的字符串。相当于
gawk -v RS="' '...
shell 不知道您希望第一个和最后一个' 之间的整个字符串应该按字面处理;它从第一个' 读取直到下一个 ',然后继续解析。
此外,没有办法在'...' 中引用单引号,因为反斜杠本身就是字面意思。 '\'' 不是一个单一的';这是' 和\。
如果您使用bash 或具有类似扩展名的shell,您可以使用ANSI 样式的引用。您必须确保所有文字 ' 和 '\ 都被转义。
# Should be correct, not not tested
ssh <HOST> $'gawk -v RS=\'"\' \'NR % 2 == 0 { gsub(/\\n/, "") } { printf("%s%s", $0, RT) }\' "<File name>" | wc -l'
或者您可以使用"..." 作为外引号,并确保所有文字$ 和" 都被转义(以及任何\,否则将被视为转义字符)。
# Should be correct, not not tested
ssh <HOST> "gawk -v RS='\"' 'NR % 2 == 0 { gsub(/\n/, \"\") } { printf(\"%s%s\", \$0, RT) }" "<File name>" | wc -l'
我的偏好是通过将代码放在脚本中来避免问题
#!/bin/sh
gawk -v RS='"' 'NR % 2 == 0 { gsub(/\n/, "") } { printf("%s%s", $0, RT) }' "<File name>" | wc -l
复制到远程主机
scp <HOST>:\~/myscript
并执行它
ssh <HOST> 'sh myscript'