2개의 For 루프를 사용하여 두 개의 다른 파일에 2개의 답변 출력을 인쇄합니다.

2개의 For 루프를 사용하여 두 개의 다른 파일에 2개의 답변 출력을 인쇄합니다.

일부 내용/라인이 포함된 파일이 2개 있습니다.

예:

cat a.txt
  1
  2
  3
  4

cat b.txt
  a
  b
  c
  d

다음 출력을 얻으려면 for 루프를 사용해야 합니다.

 1 a
 2 b
 3 c
 4 d

아래 스크립트를 시도했지만 잘못된 출력이 제공됩니다.

for i in `cat a.txt`
 do 
  for j in `cat b.txt`
   do 
     echo $i and $j
   done
 done

1 and a
1 and b
1 and c
1 and d
2 and a
2 and b
2 and c
2 and d
3 and a
3 and b
3 and c
3 and d
4 and a
4 and b
4 and c
4 and d

For 루프를 만드는 데 도움을 주세요. 미리 감사드립니다

답변1

@ilkkachu가 언급했듯이 paste이것이 가장 좋은 대답입니다.

paste a.txt b.txt

또는 탭 문자 대신 단일 공백을 구분 기호로 사용하십시오.

paste -d ' ' a.txt b.txt

쉘 전용 답변의 경우 먼저줄을 읽지 마세요for그리고쉘 루프를 사용하여 텍스트를 처리하는 것이 왜 나쁜 습관으로 간주됩니까?

단일 while 루프를 사용하여 두 파일의 줄을 동시에 읽을 수 있습니다

while IFS= read -r lineA <&3; IFS= read -r lineB <&4; do
    echo "$lineA $lineB"
done 3<a.txt 4<b.txt

가독성을 위해 더 많은 공백을 선호하는 경우:

while IFS= read -r lineA <&3
      IFS= read -r lineB <&4
do
    echo "$lineA $lineB"
done 3<a.txt 4<b.txt

또 다른 옵션: 각 파일을 배열로 읽어온 다음 배열 인덱스를 반복합니다.

mapfile -t a < a.txt
mapfile -t b < b.txt
for idx in "${!a[@]}"; do printf '%s %s\n' "${a[idx]}" "${b[idx]}"; done

관련 정보