파일을 그대로 읽기

파일을 그대로 읽기

내 문제는 텍스트 파일을 단어별로 읽고 변수의 각 단어를 복구하는 것입니다. 나는 이것을 시도한다:

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바꾸세요 .

한 줄에 들어갈 수 있도록 세미콜론을 추가합니다.

답변3

공백으로 구분되지만 구두점이 포함된 "단어" 목록을 받게 됩니다.

while read -a tmp_var; 
do
    for i in "${tmp_var[@]}"
    do
        var[${#var[*]}=$i
    done
done < test.txt

그러나 "1 word in line" 목록에서는 평소와 같이 한 줄씩 test.txt또는 tr등 으로 변환되었습니다.sedtrsedread

답변4

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

옵션 -a는 단어를 배열에 저장합니다.

옵션 -d는 구분 문자열을 지정합니다. 이는 읽기에 파일 처리를 중지할 위치를 알려줍니다. EOF를 얻을 때까지 읽기가 계속되도록 하는 빈 문자열을 지정했습니다. 즉, 줄 끝과 관계없이 전체 파일이 처리됩니다.

관련 정보