while 루프를 사용하여 두 개의 입력 파일에서 읽는 방법

제이 팔 싱

중첩 된 while 루프에서 한 번에 한 줄씩 두 개의 입력 파일에서 읽는 방법이 있는지 알고 싶었습니다. 예를 들어, 두 개의 파일 FileAFileB.

FileA :

[jaypal:~/Temp] cat filea
this is File A line1
this is File A line2
this is File A line3

FileB :

[jaypal:~/Temp] cat fileb
this is File B line1
this is File B line2
this is File B line3

현재 샘플 스크립트 :

[jaypal:~/Temp] cat read.sh 
#!/bin/bash
while read lineA
    do echo $lineA 
    while read lineB
        do echo $lineB 
        done < fileb
done < filea

실행:

[jaypal:~/Temp] ./read.sh 
this is File A line1
this is File B line1
this is File B line2
this is File B line3
this is File A line2
this is File B line1
this is File B line2
this is File B line3
this is File A line3
this is File B line1
this is File B line2
this is File B line3

문제 및 원하는 출력 :

이것은 FileA의 각 줄에 대해 FileB를 완전히 반복합니다. 계속, 중단, 종료를 사용해 보았지만 원하는 결과를 얻을 수있는 것은 없습니다. 스크립트가 파일 A에서 한 줄만 읽은 다음 FileB에서 한 줄을 읽고 루프를 종료하고 파일 A의 두 번째 줄과 파일 B의 두 번째 줄을 계속 읽으려고합니다. 다음 스크립트와 유사한 것-

[jaypal:~/Temp] cat read1.sh 
#!/bin/bash
count=1
while read lineA
    do echo $lineA 
        lineB=`sed -n "$count"p fileb`
        echo $lineB
        count=`expr $count + 1`
done < filea

[jaypal:~/Temp] ./read1.sh 
this is File A line1
this is File B line1
this is File A line2
this is File B line2
this is File A line3
this is File B line3

while 루프로 이것이 가능합니까?

Lesmana

첫 번째 파일에서 일부 문자가 발생하지 않는다는 것을 확실히 알고 있다면 붙여 넣기를 사용할 수 있습니다.

기본 구분 기호 탭을 사용한 붙여 넣기의 예 :

paste file1 file2 | while IFS="$(printf '\t')" read -r f1 f2
do
  printf 'f1: %s\n' "$f1"
  printf 'f2: %s\n' "$f2"
done

다음을 사용한 붙여 넣기의 예 @:

paste -d@ file1 file2 | while IFS="@" read -r f1 f2
do
  printf 'f1: %s\n' "$f1"
  printf 'f2: %s\n' "$f2"
done

문자가 첫 번째 파일에서 발생하지 않는 것이 보장되면 충분합니다. 이것은 마지막 변수를 채울 때 read무시 하기 때문 입니다 IFS. 따라서 @두 번째 파일에서 발생 하더라도 분할되지 않습니다.

확실한 코드를 위해 몇 가지 bash 기능을 사용한 붙여 넣기의 예 :

while IFS=$'\t' read -r f1 f2
do
  printf 'f1: %s\n' "$f1"
  printf 'f2: %s\n' "$f2"
done < <(paste file1 file2)

사용 된 Bash 기능 : ansi c 문자열 ( $'\t') 및 프로세스 대체 ( <(...))를 사용 하여 서브 쉘 문제에서 while 루프방지합니다 .

두 파일 모두에서 어떤 문자도 발생하지 않을지 확신 할 수없는 경우 파일 설명자를 사용할 수 있습니다 .

while true
do
  read -r f1 <&3 || break
  read -r f2 <&4 || break
  printf 'f1: %s\n' "$f1"
  printf 'f2: %s\n' "$f2"
done 3<file1 4<file2

많이 테스트되지 않았습니다. 빈 줄에서 끊어 질 수 있습니다.

파일 설명자 번호 0, 1 및 2는 이미 각각 stdin, stdout 및 stderr에 사용됩니다. 3 이상의 파일 설명자는 (일반적으로) 무료입니다. bash 매뉴얼은 "내부적으로 사용"되기 때문에 9보다 큰 파일 설명자를 사용하지 않도록 경고합니다.

열린 파일 설명자는 쉘 함수 및 외부 프로그램에 상속됩니다. 열린 파일 설명자를 상속하는 함수 및 프로그램은 파일 설명자를 읽고 쓸 수 있습니다. 함수 또는 외부 프로그램을 호출하기 전에 필요하지 않은 모든 파일 설명자를 닫도록주의해야합니다.

다음은 실제 작업 (인쇄)과 메타 작업 (두 파일을 병렬로 한 줄씩 읽음)과 분리 된 위와 동일한 프로그램입니다.

work() {
  printf 'f1: %s\n' "$1"
  printf 'f2: %s\n' "$2"
}

while true
do
  read -r f1 <&3 || break
  read -r f2 <&4 || break
  work "$f1" "$f2"
done 3<file1 4<file2

이제 우리는 작업 코드를 제어 할 수없는 척하고 그 코드는 어떤 이유로 든 파일 설명자 3에서 읽으려고합니다.

unknowncode() {
  printf 'f1: %s\n' "$1"
  printf 'f2: %s\n' "$2"
  read -r yoink <&3 && printf 'yoink: %s\n' "$yoink"
}

while true
do
  read -r f1 <&3 || break
  read -r f2 <&4 || break
  unknowncode "$f1" "$f2"
done 3<file1 4<file2

다음은 예제 출력입니다. 첫 번째 파일의 두 번째 줄은 루프에서 "도난"된 것입니다.

f1: file1 line1
f2: file2 line1
yoink: file1 line2
f1: file1 line3
f2: file2 line2

다음은 외부 코드 (또는 해당 문제에 대한 코드)를 호출하기 전에 파일 설명자를 닫는 방법입니다.

while true
do
  read -r f1 <&3 || break
  read -r f2 <&4 || break
  # this will close fd3 and fd4 before executing anycode
  anycode "$f1" "$f2" 3<&- 4<&-
  # note that fd3 and fd4 are still open in the loop
done 3<file1 4<file2

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

while 루프를 사용하여 두 개의 입력 파일에서 읽는 방법

분류에서Dev

bash 루프를 통해 sed 처리를 사용하여 두 개의 입력 파일을 읽는 방법은 무엇입니까?

분류에서Dev

foreach 루프를 사용하여 두 파일의 내용을 하나씩 읽는 방법은 무엇입니까?

분류에서Dev

while 루프를 사용하여 파일에서 숫자의 합계를 찾는 방법은 무엇입니까?

분류에서Dev

단일 파이썬 루프에서 두 개의 for 루프를 수행하는 방법은 무엇입니까?

분류에서Dev

PHP에서 while 루프를 사용하여 모든 단일 a4 페이지에 두 개의 보고서를 생성하는 방법

분류에서Dev

PHP에서 두 개의 while 루프를 동시에 실행하는 방법은 무엇입니까?

분류에서Dev

for 루프에서 두 개의 변수를 사용하는 방법?

분류에서Dev

여러 입력 파일에서 파일에 두 개의 열을 쓰는 방법

분류에서Dev

파이썬에서 두 개의 루프를 사용하여 여러 행을 만들고 추가하는 방법

분류에서Dev

로그 파일에서 rex를 사용하여 두 개의 필드를 얻는 방법은 무엇입니까?

분류에서Dev

파이썬의 for 루프에서 두 개의 다른 루프를 사용하는 방법

분류에서Dev

while 루프를 사용하여 입력 문자열의 유효성을 검사하는 방법

분류에서Dev

while 루프를 사용하여 텍스트 파일에서 텍스트를 연속적으로 읽고 텍스트 매개 변수를 명령으로 출력하는 방법

분류에서Dev

하나의 루프에서 두 개의 변수를 사용하는 방법

분류에서Dev

두 개의 for 루프에서 break를 사용하는 방법은 무엇입니까?

분류에서Dev

이것이 JavaScript에서 두 개의 루프를 사용하는 올바른 방법입니까?

분류에서Dev

HTML5 및 Javascript를 사용하여 두 개의 텍스트 파일을 동시에 읽는 방법

분류에서Dev

HTML에서 동일한 입력 값을 사용하여 하나의 입력 필드, 두 개의 버튼 및 두 개의 작업을 갖는 방법

분류에서Dev

두 개의 입력 파일을 목록으로 사용하는 Bash 루프

분류에서Dev

awk를 사용하여 두 개의 다른 파일에서 하나의 열을 병합하는 방법

분류에서Dev

PHP while 루프를 사용하여 슬라이드 당 2 개의 이미지를 슬라이드에 표시하는 방법은 무엇입니까?

분류에서Dev

배치 파일의 for 루프 내에서 두 개의 지역 변수를 확장하는 방법

분류에서Dev

systemd를 사용하여 암호를 한 번만 입력하여 두 개의 LUKS 장치에 걸쳐있는 루트 파일 시스템의 잠금을 해제하는 올바른 방법은 무엇입니까?

분류에서Dev

PHP를 사용하여 csv 파일의 두 번째 열을 읽는 방법은 무엇입니까?

분류에서Dev

Bash : 여러 조건을 포함하는 while 루프에서 파일을 읽는 방법은 무엇입니까?

분류에서Dev

쉘에서 while 루프를 사용하여 한 파일에서 읽고 다른 파일로 리디렉션하는 방법

분류에서Dev

vi 편집기를 사용하여 두 개의 다른 파일을 여는 방법은 무엇입니까?

분류에서Dev

vi 편집기를 사용하여 두 개의 다른 파일을 여는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    while 루프를 사용하여 두 개의 입력 파일에서 읽는 방법

  2. 2

    bash 루프를 통해 sed 처리를 사용하여 두 개의 입력 파일을 읽는 방법은 무엇입니까?

  3. 3

    foreach 루프를 사용하여 두 파일의 내용을 하나씩 읽는 방법은 무엇입니까?

  4. 4

    while 루프를 사용하여 파일에서 숫자의 합계를 찾는 방법은 무엇입니까?

  5. 5

    단일 파이썬 루프에서 두 개의 for 루프를 수행하는 방법은 무엇입니까?

  6. 6

    PHP에서 while 루프를 사용하여 모든 단일 a4 페이지에 두 개의 보고서를 생성하는 방법

  7. 7

    PHP에서 두 개의 while 루프를 동시에 실행하는 방법은 무엇입니까?

  8. 8

    for 루프에서 두 개의 변수를 사용하는 방법?

  9. 9

    여러 입력 파일에서 파일에 두 개의 열을 쓰는 방법

  10. 10

    파이썬에서 두 개의 루프를 사용하여 여러 행을 만들고 추가하는 방법

  11. 11

    로그 파일에서 rex를 사용하여 두 개의 필드를 얻는 방법은 무엇입니까?

  12. 12

    파이썬의 for 루프에서 두 개의 다른 루프를 사용하는 방법

  13. 13

    while 루프를 사용하여 입력 문자열의 유효성을 검사하는 방법

  14. 14

    while 루프를 사용하여 텍스트 파일에서 텍스트를 연속적으로 읽고 텍스트 매개 변수를 명령으로 출력하는 방법

  15. 15

    하나의 루프에서 두 개의 변수를 사용하는 방법

  16. 16

    두 개의 for 루프에서 break를 사용하는 방법은 무엇입니까?

  17. 17

    이것이 JavaScript에서 두 개의 루프를 사용하는 올바른 방법입니까?

  18. 18

    HTML5 및 Javascript를 사용하여 두 개의 텍스트 파일을 동시에 읽는 방법

  19. 19

    HTML에서 동일한 입력 값을 사용하여 하나의 입력 필드, 두 개의 버튼 및 두 개의 작업을 갖는 방법

  20. 20

    두 개의 입력 파일을 목록으로 사용하는 Bash 루프

  21. 21

    awk를 사용하여 두 개의 다른 파일에서 하나의 열을 병합하는 방법

  22. 22

    PHP while 루프를 사용하여 슬라이드 당 2 개의 이미지를 슬라이드에 표시하는 방법은 무엇입니까?

  23. 23

    배치 파일의 for 루프 내에서 두 개의 지역 변수를 확장하는 방법

  24. 24

    systemd를 사용하여 암호를 한 번만 입력하여 두 개의 LUKS 장치에 걸쳐있는 루트 파일 시스템의 잠금을 해제하는 올바른 방법은 무엇입니까?

  25. 25

    PHP를 사용하여 csv 파일의 두 번째 열을 읽는 방법은 무엇입니까?

  26. 26

    Bash : 여러 조건을 포함하는 while 루프에서 파일을 읽는 방법은 무엇입니까?

  27. 27

    쉘에서 while 루프를 사용하여 한 파일에서 읽고 다른 파일로 리디렉션하는 방법

  28. 28

    vi 편집기를 사용하여 두 개의 다른 파일을 여는 방법은 무엇입니까?

  29. 29

    vi 편집기를 사용하여 두 개의 다른 파일을 여는 방법은 무엇입니까?

뜨겁다태그

보관