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 に答える