일부 내용/라인이 포함된 파일이 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