0

我需要对几 TB 的日志数据进行切片,并且更喜欢命令行的速度。我会在处理之前将文件分成块,但需要删除一些部分。

以下是格式示例:

uuJ oPz eeOO    109 66  8
uuJ oPz eeOO    48  0   221
uuJ oPz eeOO    9   674 3
kf iiiTti oP    88  909 19
mxmx lo uUui    2   9   771
mxmx lo uUui    577 765 27878456

前 3 个字母数字字符串之间的间隔是空格。之后的一切都是标签。行用 分隔 \n

我只想保留每组中的最后一行。

如果组中只有 1 行,则应保留。

这是预期的输出:

uuJ oPz eeOO    9   674 3
kf iiiTti oP    88  909 19
mxmx lo uUui    577 765 27878456

我如何使用 sed、awk、xargs 和朋友来做到这一点,或者我应该只使用更高级别的东西,比如 Python?

4

3 回答 3

3
awk -F '\t' '
  NR==1 {key=$1} 
  $1!=key {print line; key=$1} 
  {line=$0}
  END {print line}
' file_in > file_out 
于 2012-05-14T14:50:06.020 回答
2

尝试这个:

awk 'BEGIN{FS="\t"}
    {if($1!=prevKey) {if (NR > 1) {print lastLine}; prevKey=$1} lastLine=$0}
    END{print lastLine}'

它保存最后一行并仅在它注意到密钥已更改时打印它。

于 2012-05-14T14:59:32.317 回答
0

这可能对您有用:

 sed ':a;$!N;/^\(\S*\s\S*\s\S*\)[^\n]*\n\1/s//\1/;ta;P;D' file
于 2012-05-14T22:59:09.013 回答