0

我一直在研究一个 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 表达式错误。请帮帮我。

4

1 回答 1

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
于 2013-04-25T05:33:05.013 回答