2つのForループを使用して、2つの異なるファイルに2つの回答出力を印刷します。

2つのForループを使用して、2つの異なるファイルに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ループを使用して、2つのファイルの行を同時に読み取ることができます

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

おすすめ記事