首页 > 解决方案 > 您好,我在意外标记 `(' 附近遇到 :: 语法错误

问题描述

我面临错误:意外标记附近的语法错误`('

 EXIST= 'cat Test.csv | sed "1 d" | awk -F, '{ if ($4 != "999.999.999.999" && $4 != "99.99.99.99") {print $1}}' | sort |uniq | wc -l '

谁能帮忙?当我在终端上运行相同的,它运行完美。但是当我尝试在脚本中运行它时,给了我错误

标签: linuxawk

解决方案


复制/粘贴您编写的每个 shell 脚本到http://shellcheck.net并修复它告诉您的问题,直到您了解基础知识,当然在此论坛上发布包含此类脚本的问题之前。当人们发布包含工具可以检测到的错误的脚本时,我们感到很沮丧。

除了错误 shellcheck 会告诉你 - 你不需要catsed何时使用awkand sort | uniq=sort -u但无论如何你的整个管道可以减少到一个 awk 脚本:

exist=$( awk -F, '(NR>1) && ($4 !~ /^(999?\.){3}999?$/) && !seen[$1]++{cnt++} END{print cnt+0} Test.csv)' )

另请参阅正确的 Bash 和 shell 脚本变量大写,了解我使用exist而不是EXIST作为变量名的原因。

但是,您将唯一$1s 的计数存储在名为 的变量中exist,这让我想知道您是否真的需要它来保存计数。


推荐阅读