ファイルを繰り返し、各単語を変数として作成しますか?

ファイルを繰り返し、各単語を変数として作成しますか?

次のテキストファイルがあります。

1923.12.312. Nikl
12391.123.123 Jo
12398123.123912 Ad

1923.12.312. variable1このファイルを繰り返してmakeを実行し、Nikl variable2echoコマンドで使用しようとします。その後、続行してこれらの背中を作り、エコーする必要が12391.123.123 variable1あります。Jo variable2

これが私がこれまでにしたことです:

while read p
do 
variable1="$(awk '{print $1}')"
variable2="$(awk '{print $2}')"
echo "if [ \"\$STATUS\" == \"$variable1\" ]
then
vem=\"$variable2\"
fi"
done saker.txt

次のように出力する必要があります。

if [ "$STATUS" == "1923.12.312." ]
then
vem="NIKL"
fi

ちょっと待ってください。しかし、そうではありません。代わりに、これが出力です。

awk: cmd. line:1: {print $2)
awk: cmd. line:1:          ^ syntax error
if [ "STATUS" == "12391.123.123
12398123.123912" ]
then
vem=""
fi

また、変数を削除して次のことを試しました。

while read p
do 
echo "if [ \"\$STATUS\" == \"`awk '{print $1}'`\" ]
then
vem=\"`awk '{print $2}'`\"
fi"
done saker.txt

しかし、それは同じ結果をもたらしました。

ベストアンサー1

シェルを使う

行を変数に分割する読み取り機能を使用すると簡単です。

while read var1 var2
do
    echo "if [ \"\$status\" == \"$var1\" ]
then
vem=\"$var2\"
fi"
done <saker.txt

これで以下が生成されます。

if [ "$status" == "1923.12.312." ]
then
vem="Nikl"
fi
if [ "$status" == "12391.123.123" ]
then
vem="Jo"
fi
if [ "$status" == "12398123.123912" ]
then
vem="Ad"
fi

awkを使用してください:

この awk コマンドは単一のprintfコマンドを使用します。

$ awk '{printf "if [ \"$status\" == \"%s\" ]\nthen\nvem=\"%s\"\nfi\n",$1,$2}' saker.txt
if [ "$status" == "1923.12.312." ]
then
vem="Nikl"
fi
if [ "$status" == "12391.123.123" ]
then
vem="Jo"
fi
if [ "$status" == "12398123.123912" ]
then
vem="Ad"
fi

おすすめ記事