注:各ファイルに1行ずつ1つの単語が含まれている場合、これは簡単です。
ソースファイルでスペースを使用したい場合は、別の区切り文字を使用できます。
while IFS=@ read -r aws_user_name aws_key aws_account_num ;do
printf "User: %-16s Key: %-22s AccNum: %s\n" \
"$aws_user_name" "$aws_key" "$aws_account_num"
# ....
done < <(
paste -d@ "$aws_users_all" "$aws_env_list" "$aws_account_numbers"
)
IFS=@
paste -d@
それがどういう意味なのかよくわかりませんか?私はそれを理解paste -d "|,"
し、IFS = ";"が何を意味するのかを理解することもできます。私もフォローするhttps://stackoverflow.com/questions/7427262/how-to-read-a-file-into-a-variable-in-shell
https://man7.org/linux/man-pages/man1/bash.1.html
ベストアンサー1
FWIW、答えよりもコメントに近いです。@roaima提供)、次のように書く方が合理的です。
while
IFS= read -r aws_user_name <&3 &&
IFS= read -r aws_key <&4 &&
IFS= read -r aws_account_num <&5
do
printf "User: %-16s Key: %-22s AccNum: %s\n" \
"$aws_user_name" "$aws_key" "$aws_account_num"
# ....
done 3< "$aws_users_all" 4< "$aws_env_list" 5< "$aws_account_numbers"
@
後で参加し、分割する代わりに@
。
この方法で@
in値を持つことは問題を引き起こさず、3つのリストの欠落要素が正しく検出されます。また、<(...)
kshismを防ぎ、標準コードにしますsh
。
awk
ループが何をするのかがすべて印刷されている場合は、そのようなperl
ループ内のいくつかの不正なツールを複数回呼び出すよりも、適切なテキスト処理ユーティリティを使用する方が合理的です。詳しくは以下をご覧ください。シェルループを使用してテキストを処理するのはなぜ悪い習慣と見なされますか?