Linux

如何從行中刪除重複的數字?

  • July 13, 2018

輸入文件

1 2 3 1 4 5 6 1 1 2 34 5 6 2

我想要這樣的輸出

1 2 3 4 5 6 34 

(所有重複號碼只能列印一次)

Perl 來救援!

perl -lane 'print join " ", grep ! $seen{$_}++, @F' < file
  • -l從輸入中刪除換行符並將它們添加到輸出
  • -n逐行處理輸入
  • -a將空格上的每個輸入拆分為 @F 數組

@F 數組由grep迭代,只保留第一次看到的元素(即它們在 %seen 散列中的值為零,因為零的否定為真)。加入只是將它們粘在一起。

注意: 此解決方案將結果保持在原始順序!


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' ' '- 將換行符切換回空格

引用自:https://unix.stackexchange.com/questions/454829