두 파일을 동시에 읽고 한 줄씩 인쇄하는 방법, bash? [복사]

두 파일을 동시에 읽고 한 줄씩 인쇄하는 방법, bash? [복사]

F1과 F2 두 파일을 매개 변수로 사용하여 교대로 인쇄하는 스크립트를 작성하고 싶습니다. 먼저 F1의 첫 번째 줄이 기록되고 F2'2의 두 번째 줄이 기록됩니다. 하나의 줄이 다른 줄보다 적으면 더 짧은 줄의 인쇄가 끝나면 스크립트는 끝까지 가장 긴 줄을 작성해야 합니다.

내 의견은 다음과 같습니다.

1) 2개의 매개변수가 없는지 확인 -> 에코하고 종료 2) F1 또는 F2가 파일이 아닌지 확인 -> 에코하고 종료 3) 텍스트:

exec 3 < $1
exec 4 < $2
i=0
j=1
while read -u 3 line && ((i==0))
do
echo line; echo
 ((i++))
((j--))
    while read -u 4 line && ((j==0))
    do
        echo line; echo
 ((j++))
((i--))
   done
 done
 exit $?

질문: 이는 두 파일의 줄 수가 동일한 경우에만 작동합니다. 이 솔루션을 다양한 크기의 파일로 확장하려면 이를 어떻게 개선해야 합니까?

답변1

쉘 스크립트가 필요하지 않습니다. 다음을 paste사용하여 직접 이 작업을 수행할 수 있습니다.POSIX에 의해 지정됨:

paste -d '\n' file1 file2

그러나 설명하는 방식대로 다른 수의 행을 처리하지 않습니다. 인용 사양:

하나 이상의 입력 파일(모든 입력 파일은 아님)에서 파일 끝 조건이 감지되면,반죽파일 끝이 감지된 파일에서 빈 줄을 읽는 것처럼 동작해야 합니다.

개인적으로 나는 귀하의 질문에 설명된 행동을 하는 것이 잘못되었다고 생각합니다. 출력의 24번째 줄을 보면 그것이 file1또는 에서 왔는지 알 수 없습니다 file2. 실제 동작을 기반으로 출력의 짝수 행 번호이기 때문에 paste그것이 발생하는지 알 수 있습니다 .file2

tr -s '\n'다음과 같이 출력을 파이프할 수 있습니다.

paste -d '\n' file1 file2 | tr -s '\n'

그러나 만약 있다면실제두 파일 모두에 빈 줄이 있으면 예상한 결과를 얻을 수 없습니다.

관련 정보