繁体   English   中英

BASH脚本:从命令输出中获取模式,将其用作另一个命令的变量以进行处理[…]

[英]BASH scripting: get pattern from command output, serve it as a variable to another command for processing […]

我有带有这种格式数据的文件:

2014-02-05 09:43:30;data;data;data;data;data;
2014-02-05 09:52:10;data;data;data;data;data;
2014-02-05 10:02:41;data;data;data;data;data;

通过使用grep搜索特定的“数据”模式,已经处理了该数据。 awk语法并产生与原始文件数据相同格式的输出。 该输出显示在屏幕上。

我感兴趣的是第一部分:

2014-02-05 09:43:30     

我在其上运行的服务器的日期为GMT(UTC)时区,并且数据也采用这种格式。 我想获取上述数据的一部分,并像这样替换它:

  • 从生成的输出中删除2014-02-05 09:43:30
  • 将时间部分(09:43:30)输入到TZ = America / Washington date -d“ 09:43:30”(作为每个处理行的已保存变量),以获取指定日期/时间的输出时区(美国/华盛顿)
  • 将TZ = America / Washington date -d“ 09:43:30”的输出重新插入到原始输出(由grep | awk生成)中,用TZ =生成的新日期和时间替换原始日期和处理时间美国/华盛顿日期-d“ 09:43:30”
  • 重新显示修改后的输出

如上所述,我要实现的过程背后的语法逻辑存在问题。

尝试类似

#!/bin/bash
while read -r line; do
  first="${line%%;*}"
  second="${line#*;}"
  export TZ=EST
  echo $(date -d "$first GMT" '+%Y-%m-%d %H:%M:%S')";$second"
done < <(grep)

输出示例

> abovescript 
2014-02-05 04:43:30;data;data;data;data;data;
2014-02-05 04:52:10;data;data;data;data;data;
2014-02-05 05:02:41;data;data;data;data;data;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM