【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      相关资源
      最近更新 更多