ここに私のコードがあります。
このコードを実行する理由を説明できます。私は1つのファイルを取得しようとし、ラインを取得し、ライン1に「があるかどうかを推測します。「なら、2番目のファイルに切り替えてライン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の改善提案にもかかわらずコード行が意味を持ちます。