如何将STDIN和归档以在SED或尴尬中进行格式化输出

  • 本文关键字:输出 格式化 SED STDIN awk sed
  • 更新时间 :
  • 英文 :


我需要找到一行代码,我认为SED或尴尬将是最好的工具,可以使用两个输入(一个stdin,一个文件(,然后组合它们以输出一个格式化的格式化线到stdout。

stdin数据:20170607233000 wind0 180 1 2 3

文件数据:270

所需的输出:270 1 2 3(用文件270替换180,删除时间戳和wind0"名称"(

我有这条代码:

awk ‘ { printf "%d %d %d %d", $7, $4, $5, $6 }’ - heading.txt

,但它处理stdin和pread.txt和独立输入,并提供两个输出。

我还找到了这个代码的示例,它接近我想要的,但我不明白如何格式/重新排序输出:

awk ’FNR==NR { a[FNR""] = $0; next } { print a[FNR""], $0 }'

在您关心的情况下,这里是背景:这是一个坐在(大(船上的气象站。风向总是相对于船报告,通常是向北报告,但这不是准确的。船在一个锚点上枢转,总是朝向风中。我有一个挂在Raspberrypi的磁力计(指南针(,该磁力计是气象站,并读取船的标题正面向,并通过Cron将其写入文件。这使船进入了巨大的风量。我需要从文件中获取标题数据,并用"真实"值替换风向。气象站代码足够好,可以让我通过CGI脚本根据其他测量值创建一个"虚拟"量规,并插入代码。限制是代码必须是可以在Linux Shell中执行的单行,并通过Stdout返回数据。

使用sed

的简单解决方案
echo "20170607233000 wind0 180 1 2 3" | sed 'N;s/n.*180//;' file -

,除非将stdin称为 -/dev/stdin,否则您无法从stdin读取和文件,因此先从file中首先读取该值并将其存储到VAR中。然后读取来自stdin的数据并输出:

$ echo 20170607233000 wind0 180 1 2 3 | awk 'NR==FNR{b=$1;next}{print b, $4,$5,$6}' file -
270 1 2 3

最新更新