私の問題は、テキストファイルを単語ごとに読み、変数の各単語を回復することです。私はこれを試みます:
while read ligne;
do {
for ( i=1; i<= length ($ligne); i++); do
{ var=$(awk '{print $i}' test.txt)}
}done < test.txt
しかし、うまくいきません。次のエラーが発生します。
Couldn't parse this for loop
答え1
単語をどのように定義するかによって異なります。
単語が複数のスペースで区切られている場合は、次のことができます。
tr -s '[:blank:]' '[\n*]' < file |
while IFS= read -r word; do
: echo "$word" here
done
A-Z
a-z
単語がおよび次を含む一連の文字の場合_
:
tr -cs 'A-Za-z_' '[\n*]' < file | ...
既存のSystem Vシステムでは角かっこを使用する必要がありました[A-Za-z_]
。
答え2
ただ
while read -ra line;
do
for word in "${line[@]}";
do
echo "$word";
done;
done < test.txt
ファイルをそのまま分割します。その言葉にしたいとおりにecho
変えてください。
1行に収まるようにセミコロンを追加します。
答え3
スペースで区切られますが、句読点を含む「単語」のリストが表示されます。
while read -a tmp_var;
do
for i in "${tmp_var[@]}"
do
var[${#var[*]}=$i
done
done < test.txt
ただし、「1 word in line」リストでは、通常どおり1行ずつまたは等にtest.txt
変換tr
されています。sed
tr
sed
read
答え4
read -a WORDS -d "" < file.txt
for word in "${WORDS[@]}"
do
echo $word
done
オプション -a は、単語を配列に格納します。
オプション -d は区切り文字列を指定します。これは、読み取りにファイルの処理を停止する場所を示します。 EOFを取得するまで読み取りが続行される空の文字列を指定しました。つまり、行末に関係なくファイル全体が処理されます。