我正在使用jq以一种可读的方式格式化journalctl -o json
中的日志条目。虽然效果很好,但我缺少重新启动的journalctl指示器。此信息未直接包含在json格式输出中。但是可以通过将当前对象的_BOOT_ID
值与上一行的值进行比较来推断。如果它们不同,则该消息属于另一个引导会话,我需要插入“-Reboot-”这一行。
如何在jq中比较该值?
以下是我正在做的事情的简单版本:
journalctl -o json --since today |jq -r '
"\(._SOURCE_REALTIME_TIMESTAMP // .__REALTIME_TIMESTAMP |tonumber |. / 1000000 |strflocaltime("%m-%d %H:%M:%S")) \(.SYSLOG_IDENTIFIER // .UNIT): \(.MESSAGE)"
' |less
它显示时间戳,单位名称和消息。我正在寻找的东西类似以下内容(其中$$previous$$
不存在):
journalctl -o json --since today |jq -r '
"\(if ._BOOT_ID != $$previous$$._BOOT_ID then "-- Reboot --\n" else "" end)\(._SOURCE_REALTIME_TIMESTAMP // .__REALTIME_TIMESTAMP |tonumber |. / 1000000 |strflocaltime("%m-%d %H:%M:%S")) \(.SYSLOG_IDENTIFIER // .UNIT): \(.MESSAGE)"
' |less
我也接受在一行的末尾设置变量,并在下一行的开始访问它们;但是变量似乎不存在,我只能设置当前对象的属性,这无济于事。
答案 0 :(得分:1)
可以使用ID <- c("i_1", "i_2", "i_3", "i_4")
t_1 <- c("A","C","A","C")
t_2 <- c("C","A","C","L")
t_3 <- c("L","C","L","L")
t_4 <- c("C","L","L","L")
path <-data.frame("ID" = ID, "t_1" = t_1, "t_2"=t_2, "t_3" = t_3, "t_4" = t_4)
path
diff_path_01 <- path[path$t_1 =="A" & path$t_2 == "C" &path$t_3 == "L",]
diff_path_01
diff_path_02 <- path[path$t_1 =="A" & path$t_2 == "C" &path$t_3 == "C" & path$t_4 == "L",]
diff_path_02
diff_path_03 <- path[path$t_2 =="A" & path$t_3 == "C" &path$t_4 == "L",]
diff_path_03
row(diff_path_03)
count <- nrow(diff_path_01)+nrow(diff_path_02) +nrow(diff_path_03)
count
沿以下行获得解决方案:
foreach
您将用定义感兴趣投影的过滤器替换jq -nr '
foreach inputs as $entry (null;
$entry
+ if (. != null) and (._BOOT_ID != $entry._BOOT_ID)
then {emit: true} else null end;
if .emit then "-- Reboot --" else empty end,
.foo)
'
。