一部のコンテンツ/行を含むファイルが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