내 문제는 텍스트 파일을 단어별로 읽고 변수의 각 단어를 복구하는 것입니다. 나는 이것을 시도한다:
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
바꾸세요 .
한 줄에 들어갈 수 있도록 세미콜론을 추가합니다.
답변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
등 으로 변환되었습니다.sed
tr
sed
read
답변4
read -a WORDS -d "" < file.txt
for word in "${WORDS[@]}"
do
echo $word
done
옵션 -a는 단어를 배열에 저장합니다.
옵션 -d는 구분 문자열을 지정합니다. 이는 읽기에 파일 처리를 중지할 위치를 알려줍니다. EOF를 얻을 때까지 읽기가 계속되도록 하는 빈 문자열을 지정했습니다. 즉, 줄 끝과 관계없이 전체 파일이 처리됩니다.