>cat /tmp/list1
john
jack
>cat /tmp/list2
smith
taylor
保证list1和list2的行数相同。
f(){
i=1
while read line
do
var1 = `sed -n '$ip' /tmp/list1`
var2 = `sed -n '$ip' /tmp/list2`
echo $i,$var1,$var2
i=`expr $i+1`
echo $i,$var1,$var2
done < $INFILE
}
因此f()的输出应为:
1,john,smith
2,jack,taylor
但是
1,p,p
1+1,p,p
如果我更换以下内容:
var1 = `sed -n '$ip' /tmp/list1`
var2 = `sed -n '$ip' /tmp/list2`
用这个:
var1=`head -$i /tmp/vip_list|tail -1`
var2=`head -$i /tmp/lb_list|tail -1`
然后输出:
1,john,smith
1,john,smith
答案 0 :(得分:2)
$ ip是使ip成为变量名称的问题,你应该使用$ {i} p而不是让shell知道变量是我不是ip,你的代码看起来应该是
var1 =`sed -n“$ {i} p”/ tmp / list1`
var2 =`sed -n“$ {i} p”/ tmp / list2`
答案 1 :(得分:2)
如果你可以使用paste和awk命令,你可以用单行代码实现相同的目的:
paste -d, /tmp/list1 /tmp/list2 | awk '{print NR "," $0}'
用此行替换while脚本:)