入力ファイル
1 2 3 1 4 5 6 1 1 2 34 5 6 2
私の考えでは出力このように
1 2 3 4 5 6 34
(繰り返される数字はすべて一度だけ印刷されます)
答え1
答え2
メモ: このソリューションは結果を元の順序で維持します!
awk
これはおよびを使用して簡単に実行できますtr
。コンテンツがファイルにある場合FILE
:
$ tr ' ' '\n' < FILE | awk '!x[$0]++' | tr '\n' ' '
はい
$ echo "1 2 3 1 4 5 6 1 1 2 34 5 6 2" | \
tr ' ' '\n' | awk '!x[$0]++' | tr '\n' ' '
1 2 3 4 5 6 34
どのように動作しますか?
tr ' ' '\n'
- スペースを改行文字に切り替えるawk '!x[$0]++'
- ユニークなキャラクターを印刷するtr '\n' ' '
- スイッチラインが空白に戻す
答え3
そしてawk
(ファイル全体から重複するアイテムを削除する):
awk '{ SEP=""; i=0;
while (++i<=NF) { printf (!unq[$i]++? SEP $i:""); SEP=" "};
print "";
}' infile
または、各行から重複項目を個別に削除する:
awk '{ SEP=""; i=0; delete unq;
while (++i<=NF) { printf (!unq[$i]++? SEP $i:""); SEP=" "};
print "";
}' infile
数字を繰り返し、以前に見たことがない場合は呼び出し配列に追加し、unq
それprintf
以外の場合は何も印刷しません。
今後読む内容:
答え4
を使用してこれを行うことができますsort
。ソートは行でのみ機能するため、ファイルのスペースを新しい行に置き換える必要があります。
たとえば、ファイルに次のものがtest.txt
含まれているとします。
1 2 3 1 4 5 6 1 1 2 34 5 6 2
以下のコードは必要なものを返します
>sed "s/ /\n/g" test.txt | sort -un
1
2
3
4
5
6
34
は「固有」(重複しない値)を返しますが、sort -u
数値ソートを使用しない限り、アルファベット順にソートされますsort -n
。ここでは連続した重複だけを取り除くので、整列が必要なので、uniq
とにかくパイプをする必要があります。sort -n | uniq
sort