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