ファイルをそのまま読み込む

ファイルをそのまま読み込む

私の問題は、テキストファイルを単語ごとに読み、変数の各単語を回復することです。私はこれを試みます:

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-Za-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されています。sedtrsedread

答え4

read -a WORDS -d "" < file.txt
for word in "${WORDS[@]}"
do
        echo $word
done

オプション -a は、単語を配列に格納します。

オプション -d は区切り文字列を指定します。これは、読み取りにファイルの処理を停止する場所を示します。 EOFを取得するまで読み取りが続行される空の文字列を指定しました。つまり、行末に関係なくファイル全体が処理されます。

関連情報