【问题标题】:Save multiple results from AWK to shell variables将多个结果从 AWK 保存到 shell 变量
【发布时间】:2014-04-16 18:10:48
【问题描述】:

将来自 AWK 脚本的多个结果保存到 c shell 变量中。

我在终端中运行了一个简单的 AWK 脚本,用于从输入文本文件中查找最大值和最小值。

我们如何将这个最大值和最小值保存到 c shell 变量中以便以后使用。

这里是 AWK

awk 'NR == 1 { xmax=$1; xmin=$1 } \
    { if ($1>xmax) xmax=$1; if ($1<xmin) xmin=$1;} \
    END {printf "X-Min: %d\tX-Max: %d\n", xmin, xmax}' $inpfile

我想把它保存在已经定义的变量中,比如说 $xmin 和 $xmax

任何建议都会有很大帮助,我之前没有使用 SHELL 和 AWK 的经验。

【问题讨论】:

  • 您说“c shell”,但将问题标记为bash。你指的是哪个外壳?
  • 对不起它的 c shell,刚刚删除了 bash 标签
  • 从 awk 打印,从 csh 解析。
  • @KarolyHorvath :正如我所说,我没有使用 csh 的经验,所以问题是,从 csh 解析它是什么意思。请检查有问题的更新代码。谢谢
  • @Indigo:对不起,我不熟悉 csh。但想法是:将2 5 o 2,5 之类的文本解析为两个变量。我找到了一个命中:stackoverflow.com/questions/7735160/… 我确定有很多链接,因为这是一项常见任务

标签: linux shell awk csh


【解决方案1】:

正如其他人所说,您不能将值从 awk 传递到 shell。

您需要依靠 shell 的能力来执行 cmd 替换。

当我只有 csh 的时候,我会做的

setenv xmin_xmax = `awk 'NR == 1 { xmax=$1; xmin=$1 } \
{ if ($1>xmax) xmax=$1; if ($1<xmin) xmin=$1; printf("%d|%d\n", xmin, xmax}' $inpfile`

setenv xmin = `echo "$xmin_xmax" | sed 's/|.*$//'`
setenv xmax = `echo "$xmin_xmax" | sed 's/*.|//'`

抱歉,我现在无法访问 csh 来测试它。当您使用 awk 进行 cmd 替换时,您可能需要更多的延续字符 \ 来连接这些行。

如果您对此有疑问,请将错误消息作为 cmets 发布,我会看看我是否能记住特殊的 csh 咒语。

编辑 或者查看Grymoire CSH tips 了解如何在 csh 中使用数组变量。 (我不记得了!)

IHTH

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多