这是我的代码。
我可以给出为什么我要执行这段代码。我尝试获取 1 个文件,获取一行并猜测该行 1 是否有任何“”,如果有,我切换到第二个文件并尝试查看第 1 行是否有“" 如果没有,我保留 file2/line1 的数据并进入最终文件。
但我的问题是:如何进行转义引用?
#! /bin/bash
compteur="1"
ligne="2"
rm testfinal 2>/dev/null
touch testfinal 2>/dev/null
#########BOUCLE PERMUTATION LIGNE
while (( $ligne < "32" ))
do
if [ 'cat test$compteur | sed -n $ligne\p | awk -F" "'{print $2}' ' == "*" ]
then compteur=$((compteur+1));
else
cat test$compteur | sed -n $ligne\p >> testfinal
ligne=$((ligne+1));
compteur=$((compteur=1));
fi
done
编辑:我发现自己,他的答案: if [ " sed -n $ligne\p test$compteur | awk -F" " '{print $2}'
" == "*" ]
答案1
您的示例命令没有任何意义。您没有then
或fi
与您的 一起使用if
,并且您错误地将命令填充到test
(即[
)块中。
你的代码:
if [ 'cat test$compteur | sed -n $ligne\p | awk -F" " '{print $2}' ' == "*" ]
它看起来就像您试图比较该命令链的输出,如果输出是字面意思*
,那么做一些未确定的事情?如果是这样:
if [[ "$( cat test$computer | sed -n $ligne\p | awk -F' ' '{print $2}')" == "*" ]]; then
do_something
fi
但这可以稍微优化一下;尤其是摆脱“无用的使用cat
:
if [[ "$( sed -n $ligne\p test$computer | awk -F' ' '{print $2}')" == "*" ]]; then
do_something
fi
我不确定您正在使用sed
命令做什么,但假设这linge
是一个包含要打印的行号的变量,这甚至可以在以下位置完成awk
:
if [[ "$( awk -F' ' -v ln=$linge 'NR==ln { print $2 }' )" == "*" test$computer ]]; then
do_something
fi
根据您在“答案”中提交的完整脚本,我用这些更改和其他一些小调整重写了它:
#!/bin/bash
compteur="1"
ligne="2"
> testfinal # clears contents of file in one step rather than rm; touch
#########BOUCLE PERMUTATION LIGNE
while [[ "$ligne" -lt 32 ]]; do
if [[ "$( awk -F' ' -v ln=$ligne 'NR==ln { print $2 }' test$computer )" == "*" ]]; then
compteur=$((compteur+1));
else
awk -v ln=$ligne 'NR==ln' >> testfinal
ligne=$((ligne+1))
compteur=$((compteur+1)); # I presume that the original 'compteur=1' was a typo.
fi
done
答案2
您是否有可能混淆单引号'
和反引号“``”?使用反引号(旧的、已弃用的“命令替换”,相当于新的$(...)
),您的代码行将有意义,尽管 GopeGhoti 提出了改进建议。