ここで提案されている方法を適用しようとしました[Removing duplicates on a variable without sorting awkを使用して文字列内の重複を削除しました。awkを使用してbash文字列内の重複を削除する
例えば、我々は文字列(リンク以下の完全な説明)に次のコマンドを適用することで入手する必要があり、次のような出力
apple tree appleaplle
を期待して、重複を削除
s="apple apple tree appleapple tree"
があるとは、 。
awk 'BEGIN{RS=" "; ORS=" "}{ if(a[$0] == 0){a[$0]+=1; print $0}}' <<< $s
しかし、私はこの
この最初のapple
重複が必要に応じて、消去された
apple tree appleapple tree
ではなく、最後のものを得る:それはこのように私たちは二度同じレコードを印刷するように期待していない、連想配列を使用しています。 実際に、各レコードの長さを出力すると、最後のレコードはtree
ではなく、tree
+戻り文字(私はそうだと思います)が表示されます。
$ awk 'BEGIN{RS=" "; ORS=" "}{ print length($0); print $0}' <<< $s
$ 5 apple 5 apple 4 tree 10 appleapple 5 tree
最後の木は連想配列方法を壊す結果として、実際に5つの文字ではなく4であることに注意してください。
なぜこの文字があり、どこから来たのか分かりません。 この方法を使用して重複を削除するにはどうすればこの問題を解決できますか?この例では、疑惑だ示す任意の提案
使用 'OD -c scriptfile'あなたのファイルがCR + LFの行末を持っているかどうかを確認するために、そして' dos2unix'へ修正する。 –
CR + LFの問題ではありません。これは簡単なパイロットエラーです。 –