我需要找到一行代码,我认为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