파일을 반복하고 색인을 사용하여 단어를 추출하려면 어떻게 해야 합니까?

파일을 반복하고 색인을 사용하여 단어를 추출하려면 어떻게 해야 합니까?

주어진 파일은 반드시아니요메모리 크기 제한으로 인해 변수에 저장한 후 반복합니다.

예:

var=$(cat FILE)
for i in $var
do
  echo $i
done

위의 예와 같은 방식으로 파일의 모든 문자열을 반복하면서 공백으로 구분된 각 문자열을 파일에서 직접 추출하려면 어떻게 해야 합니까?

예:

fileindex=1
totalfilecount=$(cat FILE | wc -w)
while (( ${fileindex} <= ${totalfilecount} ))
do
  onefilename= ??? missing command using fileindex
  ((fileindex+=1))
done

파일을 배열로 처리하고 색인 위치를 사용하여 단어를 추출할 수 있는 명령이 있습니까?

아이디어는 파일이 배열인 것처럼 파일의 각 단어를 처리하는 것입니다.

입력 파일 예:

one two
three four
five six

다음은 위 기능이 필요한 시나리오입니다.

  • server_A와 server_B가 있습니다.
  • server_A는 sftp(sftp만 해당)를 통해 server_B에 연결하고 일부 파일을 "가져와야" 합니다.
  • sftp의 "ls" 또는 "ls -l" 명령은 모두 와일드카드를 사용하여 특정 파일을 필터링할 수 있습니다.
  • 각 파일은 여러 가지 이유로 개별적으로 처리되어야 합니다.
  • 파일을 server_B에 그룹으로 복사한 다음 개별적으로 처리할 수 없습니다.
  • 파일 목록은 먼저 server_A에서 생성되어야 하며, 목록의 각 파일은 server_B에서 복사되어 한 번에 하나씩 처리되어야 합니다.

뭐가 문제 야?

문제는 목록이 긴 경우 "ls" 명령이 어떻게 2열 단어 목록을 생성하여 항상 단일 열 목록을 생성하는 "ls -l"과 같은 간단한 처리를 허용하지 않는다는 것입니다.

이것은 내 원래 질문으로 이어집니다. 그러한 솔루션이 존재합니까?

답변1

각 단어에 대해 이 작업을 수행할 수 있으며 awk이는 메모리 요구 사항을 충족해야 합니다.

awk -v RS=\  '{
    # Do something with the word
    print
}' file

를 사용하여 원하는 문자열을 지정할 수 있습니다 NR.

$ awk -v RS=\  'NR==2{print}' <<< 'foo bar baz'
bar

답변2

"문자열"이라고 하면 "단어"를 의미하는 거죠? 공백으로 구분된 문자열입니다. 귀하의 예를 바탕으로 순차적으로 액세스하려고 합니다.

넌 할 수있어:

$ sed 's/[ \t]\+/\n/g' YOUR_FILE | while read -r word ; do PROCESS $word ; done

사용 예:

% echo word1 word2 > YOUR_FILE
% echo word3 word4 >> YOUR_FILE
% echo word5 word6 >> YOUR_FILE
% sed 's/[ \t]\+/\n/g' YOUR_FILE | while read -r word ; do echo _${word}_ ; done
_word1_
_word2_
_word3_
_word4_
_word5_
_word6_

관련 정보