我的代码是:
dnafile=$1
for seq in (fold -w3 $dnafile | uniq); do
fold -w3 $dnafile | grep $seq | wc -l
echo $seq
echo '(new line)'
done
我收到错误:
syntax error near unexpected token `('
答案1
看起来您只想计算 产生的唯一行的数量fold -w3 $dnafile
。这可以在没有循环的情况下完成:
fold -w3 "$dnafile" | sort | uniq -c
会对sort
输出的行进行排序,fold
同时uniq -c
会计算每行连续出现的次数。
结果中的每个唯一行的输出将是一行,fold
并带有数字前缀。
语法错误来自于命令替换(即由命令的输出替换的构造)需要看起来像 的事实$( ... )
。我不确定插入缺失的内容$
实际上会让你的代码工作,因为 shell 仍然会在换行符和空格上分割结果文本,但由于我们不知道输入数据是什么样的,所以很难推测。
(...)
不允许在 for 循环中的该位置有子 shell 。
答案2
你输$
了(fold -w3 $dnafile | uniq)
。尝试这个:$(fold -w3 $dnafile | uniq)
。
$()
是命令替换的语法,同时()
引入了子shell。