【问题标题】:variable reference in a sed expression in a while loopwhile循环中sed表达式中的变量引用
【发布时间】:2013-04-18 21:13:08
【问题描述】:
我一直在编写一个 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 表达式出现错误。请帮帮我。
【问题讨论】:
标签:
shell
unix
scripting
ksh
【解决方案1】:
你的引用是错误的。单引号中的任何内容都是逐字字符串;如果你想要变量插值,你需要使用双引号(或者,在非常特殊的情况下,根本不用引号)。
您也可以将所有内容重构为 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