新しいファイルを作成せずにファイルから重複エントリを削除し、ファイルの内容の順序を保存するためのコマンドが見つからないようです。
uniq
他に他のコマンドはありますかawk
?
sed
それ以外の場合は、内部オプションが含まれていることがわかります。重複を排除する方法を知りません。
重複したサンプル.txtがあります。
1 2 1 サム 4 1
重複したサンプル.txtを削除
1 2 サム 4
答え1
特にGNUawk
と最近取得した内部編集機能を使用して
$ cat file
1
2
1
3
4
1
$ awk -i inplace '!seen[$0]++' file
$ cat file
1
2
3
4
たとえばsed -i
、「内部編集」を実行するほとんどのツールと同様に、一時ファイルを使用して編集を実行します。ただし、ファイルを手動で移動する必要はありません。
また見なさい:
答え2
コマンドが中断されると、ファイルが破損する危険があります。
{ awk '!seen[$0]++';
python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())'; } <sample.txt 1<>sample.txt
中括弧内にコマンドグループを作成し、グループの標準入力にsample.text
リダイレクトsample.txt
します1<>sample.txt
。
awk '!seen[$0]++'
~である変なイディオム順序を維持しながら重複を排除するために使用されます。
コマンドが終了すると、awk
標準出力に対応するファイル記述子はいくつかの中間位置にあるため、そのsample.txt
場所sample.txt
から切り取る必要があります。私はこれを達成する2つの方法を考えることができます
python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())'
python
インストール時にオプションですGNU Linuxシステムの場合
truncate -s "$(awk '/^pos:/{print $2}' /proc/$$/fdinfo/1)" sample.txt
答え3
sort
とともに-o
sort -u sample.txt -o sample.txt
-u
ユニークさのために
-o
出力ファイル名の場合