0
>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
4

2 回答 2

2

$ip 是使 ip 成为变量名称的问题,您应该使用 ${i}p 而不是让 shell 知道该变量不是 ip,您的代码应该看起来像

var1=`sed -n "${i}p" /tmp/list1`

var2=`sed -n "${i}p" /tmp/list2`

于 2012-09-16T15:36:34.247 回答
2

如果您可以使用 paste 和 awk 命令,则可以使用单线实现相同的目的:

paste -d, /tmp/list1 /tmp/list2 | awk '{print NR "," $0}'

用这一行替换 while 脚本:)

于 2012-09-16T15:37:34.233 回答