【问题标题】:How do I use output from awk in another command?如何在另一个命令中使用 awk 的输出?
【发布时间】:2011-03-28 00:15:37
【问题描述】:

所以我需要将日期转换为不同的格式。使用 bash 管道,我从上次控制台登录中获取日期,并使用 awk 提取相关位,如下所示:

last $USER | grep console | head -1 | awk '{print $4, $5}'

哪些输出:Aug 08 (在这种情况下,$4=Aug $5=08。)

现在,我想将 'Aug 08' 放入 date 命令中以将格式更改为数字日期。

看起来像这样:

date -j -f %b\ %d Aug\ 08 +%m-%d

输出:08-08

我的问题是,如何将其添加到我的管道中并使用 awk 变量 $4 和 $5 ,其中“Aug 08”在该日期命令中?

【问题讨论】:

  • 您实际上是在询问如何在另一个命令中使用 awk 的 输出,而不是变量。
  • date 的哪个版本(以及操作系统等)? GNU date 没有-j,它使用-f 来读取文件。你的命令是date -d Aug\ 08 +%m-%d
  • 不确定确切的版本号 -- 没有任何类型的 --version 输出。它是在 Mac OSX 上构建的 BSD,因此我根据 OS X 10.6 上的手册页将日期选项放在一起。仅打算在 mac 客户端上运行脚本,但感谢您提供的信息;如果我需要在 Linux 上做类似的事情,它会很有用。

标签: bash awk pipeline


【解决方案1】:

你只需要使用命令替换:

date ... $(last $USER | ... | awk '...') ...

Bash 将评估 $(...) 内的命令/管道并将结果放在那里。

【讨论】:

    【解决方案2】:

    获取awk拨打date

    ... | awk '{system("date -j -f %b\ %d \"" $4 $5 "\" +%b-%d")}'
    

    或者使用进程替换从awk检索输出:

    date -j -f %b\ %d "$(... | awk '{print $4, $5}')" +%b-%d
    

    【讨论】:

      【解决方案3】:

      使用反引号应该可以使您的长管道的输出保持最新状态。

      日期 -j -f %b\ %d \`最后 $USER | grep 控制台 |头-1 | awk '{打印 $4, $5}'\` +%b-%d

      【讨论】:

      • 在这种情况下可能无关紧要,但总的来说,使用$(...) 比使用反引号要好得多。可以嵌套。
      【解决方案4】:

      我猜你已经尝试过了?

      last $USER | grep console | head -1 | awk | date -j -f %b\ %d $4 $5 +%b-%d
      

      【讨论】:

      • 这不起作用。 awk 需要参数,它的输出没有路由到date 的参数
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多