2010-11-22 4 views
2

からuniqの文字列を取得していない私が望むすべては、彼らがUNIQ +ファイル

に等しい場合は、ファイルからNODE_NAME文字列を取得し、uniqの文字列を取得するためにuniqのを実行することで、次の に見てみたが、次の例にしてください私は2つの等しい行(node_name moon1)を持っています

なぜuniqコマンドを1行に減らさないのですか? 、私は本当になぜこれを理解していないのですか?

sed s'/=/ /'g file| awk -v WORD=node_name '$2 == WORD {print $0}' | awk '{print $2" "$3}' | sort | uniq 

node_name moon1 
node_name moon1 

ファイル:あなたがあなたのファイルの浮遊文字を持っているよう

. 
    . 

/home/home1/home2/config1/COMPANY/my.config  node_name=moon1 
/home/home1/home2/config1/MEAS2XML/my.config.tmp node_name=moon1 

    . 
    . 
+1

作品罰金 'X [$ 0] ++!':http://www.ideone.com/ HYkDH – codaddict

+0

ファイルに1000行以上ある場合2行は大きなファイルの一部です – jon

+0

私はmoon1の後に^ Mを見つけました。あなたのシステムにdos2unixコマンドがある場合は、この – jon

答えて

5

同じ行をマージに失敗uniqのための2つの主な原因があります。

  • ラインが本当に同一ではない - 余分な末尾の空白は、ここでいつもの容疑者です。 awkコマンドはこの例ではそれらをフィルタリングする必要がありますが、それでも確認できます。混在したラインターミネータも考えられる原因です。

  • 行が隣接していない - ロケール設定が間違っていると、行をソートできず、行が正しくソートされません。 I があります。ASCII以外のテキストを含む奇妙なケースがあり、同じ行が次々に終わることはありません。 uniqコマンドの前にsortの出力を確認してください。あなたのロケール設定は何ですか?

ここで、 'sort -u'は 'sort |ユニーク '。

EDIT:

は、これらの問題のいずれかまたは両方のように思える:

  • あなたが混在しているラインターミネータ。 LF(\ n、Unixスタイルのターミネータ)とCR/LF(\ r \ n、DOSスタイルのターミネータ)で結ばれた行がある場合、uniqはそれらが異なっていても異なる行として扱います。

  • CR/LF DOSスタイルの行終端文字とともに、行の一部に後続する空白。 CR(キャリッジリターン、 '\ r')文字は、awkを含むほとんどの(すべての)UNIXユーティリティによって空白文字とみなされません。あなたの行のいずれかに後ろに空白がない場合、CRは最後のフィールドの一部とみなされ、印刷されます。一方、最後のフィールドとCRとの間に空白がある行では、awkによって出力された最後のフィールドにはCRは含まれません。

    • DOS2UNIXが好ましい方法
    • 通りである:それは同様に空白を末尾フィルタリングするために一般的にお勧めしますが、この場合には、両方の問題を解決するLFにCR/LFラインターミネータを変更

    別の方法として、ファイルをフィルタリングするsed 's|\r$||'

+0

ありがとう国はビジネスに来るでしょう - :) – jon

1

が鳴ります。それをきれいに最初に使用して:、また、あなたの問題に関係のない

dos2unix your_file 

を、しかし、あなたは、単にsort -usort | uniqを置き換えることができます。

+1

この回答をありがとうございました。空白を削除し、すべてのファイルがUTF-8であることを確認しても、何も動作していないようです。私は私の髪を引き出し始めていた。 'do2unix'は私が探していた救いをもたらしました。 – Glutanimate

0

質問で指定したコマンドを試したことはありませんが、代わりに以下を実行しました:

猫のfoo |カット-d \ = -f 2 |並べ替え| uniqは "foo" があなたの例では2行を含むファイルをある

。 上記の出力は "moon1"です。

私はあなたの例よりも単純です。なぜなら、1行に1つの 'name = value'という対があると仮定しているからです。私はあなたのファイル形式について何も知らない。これはとにかく助け

希望...

+0

あなたのonelinerは短いかもしれませんが、後ろの空白をOPのawkコマンドとは違って扱います。 – thkala

0

私は同様の問題を通じて、私はラインの順序も維持されていることを確認したかった重複行を除去することに加えて、つもりでした。 uniqとsortを組み合わせると、この目的を破ることができます。

幸いにもawkは解決

の$ awkの提供私のためにファイル名.txt

awk and duplicate lines

関連する問題