我有两个具有两个不同值的文件。我想在循环中运行一个命令,该命令需要来自两个文件的输入。让我举个例子来简单起见。
文件1内容:
google
yahoo
文件2内容:
mail
messenger
我需要如下输出
google is good in mail
yahoo is good in messenger
如何使用 for/while 循环来实现相同的目的?
我需要一个脚本来:
$File1 需要替换 File1 中的第一个结果,$File2 需要替换 File2 中的第一个结果
/usr/local/psa/bin/domain --创建域 $File1 -mail_service true -service-plan '默认域' -ip 1.2.3.4 -login $File2 -passwd "abcghth"
答案1
-u
标准过程(在 Bash 中)是使用以下开关从不同的文件描述符中读取read
:
while IFS= read -r -u3 l1 && IFS= read -r -u4 l2; do
printf '%s is good in %s\n' "$l1" "$l2"
done 3<file1 4<file2
答案2
While loop
是可能的,但有一个简单的方法
paste File{1,2} -d% | sed 's/%/ is good in /'
-%
可以是任何符号
但是如果你坚持循环你可以使用提供的循环gniourf_gniourf或者只是愚蠢的下划线
mapfile -t A < File1
mapfile -t B < File2
if [ ${#A[*]} -lt ${#B[*]} ]
then
L=${#A[*]}
else
L=${#B[*]}
fi
n=-1
while [ $[++n] -lt $L ]
do
printf "%s is good in %s\n" "${A[$n]}" "${B[$n]}"
done