我正尝试在unix中基于时间戳列在最后一个单元格中添加状态列。我不确定如何继续。
预期I/p:
Date Location
2023-02-08 02:19 /tmp/SA
2023-02-07 01:24 /tmp/SA2
预期输出:
Date Location Status
2023-02-08 02:19 /tmp/SA Success
2023-02-07 01:24 /tmp/SA2 Failure
我尝试了以下解决方案,但结果为空白:
awk '{ if ($1==date) print success; else $1!=date; print failure; }' file.txt
4条答案
按热度按时间ruoxqz4g1#
由于日期具有固定长度,因此提取它的简单方法是使用参数扩展(参见this答案)。
因此,您可以迭代input中的所有行,提取日期,然后简单地与所需的日期进行比较:
下面是一个示例运行:
qvtsj1bj2#
看起来你需要解释一下如何让
awk
理解一个日期的样子。我的印象是你的日期格式满足下面的正则表达式:我相信这样的检查是用
awk
中的~
操作符完成的。cgfeq70w3#
根据操作系统(BSD、GNU等)的不同,以所需格式(
%Y-%m-%d
)获取日期可能会有所不同BSD
date
版本可能如下所示数据
n6lpvg4x4#
替代
awk
解决方案:target_ts="2023-02-08 02:19"
设置目标_ts变量。'NR==1{$3="Status"}
将“状态”标题列添加到标题记录。NR>1&&d==$1" "$2{$4="Success"}
对于数据记录,如果时间戳与target_ts匹配,则添加包含“成功”的第4列。NR>1&&d!=$1" "$2{$4="Failure"}
对于数据记录,如果时间戳与target_ts不匹配,则添加包含“失败”的第4列。使用
awk
惯用语句“1”进行打印。代码:
输出:
BASH备选方案:
脚本执行:(将时间戳作为第一个参数传递,将文件路径作为第二个参数传递)
输出: