タイムスタンプを含むファイルから重複した行を削除します。

タイムスタンプを含むファイルから重複した行を削除します。

これ回答ファイルから同じ行を削除するいくつかの良い解決策がありますが、私の場合は、重複した行にタイムスタンプがあるため動作しませんでした。

重複を決定するとき、awkに行の最初の26文字を無視するように指示できますか?

例:

[Fri Oct 31 20:27:05 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:10 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:13 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:16 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:21 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:22 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:23 2014] The Brown Cow Jumped Over The Moon
[Fri Oct 31 20:27:24 2014] The Brown Cow Jumped Over The Moon

なります

[Fri Oct 31 20:27:24 2014] The Brown Cow Jumped Over The Moon

(最も最近のタイムスタンプを維持してください)

答え1

uniq適切なオプションを使用できます-f

uniq -f 4 input.txt

からman uniq

  -f, --skip-fields=N
       avoid comparing the first N fields

実際、これは最初の行を表示します。

[Fri Oct 31 20:27:05 2014] The Brown Cow Jumped Over The Moon

これが問題なら、次のようにすることができます。

tac input.txt | uniq -f 4

またはそうではありませんが、あなたのサポートがtacある場合:tail-r

tail -r input.txt | uniq -f 4

答え2

awk '!seen[substr($0,27)]++' file

答え3

この試み:

awk -F ']' '{a[$2]=$1}END{for(i in a){print a[i]"]"i}}'

答え4

使用できる権限vim

:g/part of duplicate string/d

とても簡単です。より多くのファイルがある場合(例:gzipped回転log)を実行すると、事前に解凍せずにファイルが開き、最後のコマンドをvim押して繰り返すと解凍できます。端末で最後のコマンドを繰り返すのと同じです。:

関連情報