while循环中sed表达式中的变量引用

时间:2013-04-25 05:20:13

标签: shell unix scripting sed ksh

我一直在研究KornShell(ksh)脚本,其中我遇到了sed表达式错误。 我有一个名为abc的文件,有100个条目,我想在abc文件的每一行中将每个第8个参数赋值给一个变量。

我使用过这样的东西。

#!/bin/ksh
typeset -i x=1
while read line ; do
    var1=$(sed -n '$xp' abc.txt | awk '{print $8}')
    print $var1
    x="$x+1"
done < abc.txt
exit

我想将变量x称为行号,但是我在引用x变量时遇到了sed表达式的错误。请帮帮我。

1 个答案:

答案 0 :(得分:2)

你的报价错了。单引号中的任何内容都是逐字字符串;如果你想要变量插值,你需要使用双引号(或者,在非常特殊的情况下,根本没有引号)。

你也可以将每一个重构为Awk。平凡,

var1=$(awk -v n="$x" 'NR==n{ print $8 }' abc.txt)

但是,主循环再次读取整个文件只是为了从中获取一行是非常低效的。也许你想要像

这样的东西
awk '{ print NR, $8 }' abc.txt |
while read x var1; do
    print "$var1"
    # presumably do something with $x too?
done