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 ではないことをシェルに知らせる代わりに ${i}p を使用する必要があります。コードは次のようになります。

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 に答える