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


8

この質問/回答には、ファイル内の同一の行を削除するためのいくつかの良い解決策がありますが、それ以外の場合は重複する行にタイムスタンプがあるため、私の場合は機能しません。

重複を判断するときに、行の最初の26文字を無視するようにawkに指示することは可能ですか?

例:

[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

(最新のタイムスタンプを保持)


4
はい。いくつかの入力と出力の例を投稿するとしたら、これは問題になるかもしれません。
jasonwryan 2014年

3
このタイプの質問をするときは、入力と希望の出力を含める必要があります。推測しなければならない場合、私たちは仕方がありません。
terdon

1
「はい」または「いいえ」は許容できる回答のようですが、その知識で何をしますか?いいえの場合、awkを拡張しますか?
Anthon、2014年

1
ワオ。80,000人の担当者は、これは使用不可能な質問(私はそれを良い質問とは言いません)であると主張しましたが、単一の近い投票ではありませんでしたか?
Hauke Laging 2014年

5
@HaukeLaging OPに私たちのコメントに反応する機会を与えるのは妥当なようです。彼らは現在そうしており、質問は大幅に改善されました。
terdon

回答:


14

あなたは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

1
それはひどく素晴らしいです:)
Ramesh 14年

3
@Rameshこれらのツールの一部には、便利なオプションがいくつかあります。これらのオプションを知っていると、思いつくawk / perl / pythonの要素を打ち負かすことができます。
Anthon、2014年

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

タイムスタンプの部分は、この回答が書かれたときの質問の一部ではなかったため、この解決策ではカバーしていません。
Hauke Laging 2014年

2
これが、Qが完全に肉付けされるまで、多くの人がこれらをクローズするために取り組んでいる理由です。そうでなければ、これらのQはあなたの時間とOPを浪費しています。
slm

3

これを試してください:

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

0

perl解決策:

perl -F']' -anle '$h{$F[1]} = $_; END{print $h{$_} for keys %h}' file

0

の力を使うことができますvim

:g/part of duplicate string/d

非常に簡単。あなたは(たとえば、gzip圧縮されたとしてカップルより多くのファイルがある場合は、回転ログ)を、vimあなたの側で任意の予備解凍せずにそれらを開き、あなたは押すことで、最後のコマンドを繰り返すことができます:し、。ターミナルで最後のコマンドを繰り返すように。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.