Shell

從列表中返回字元的第一個實例

  • May 3, 2016

假設我將此命令的輸出保存到文件中。

cat /dev/urandom | tr -dc '[:graph:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 50

我只想比較文件中每一行的前 n 個字元,並只返回包含這些字元的第一個實例的第一行。

因此,例如,無需對文件進行排序,我想查看文件中每一行的前四個字元。我想在每一行上找到任何四個字元串的第一個實例,並只列印包含第一個實例的行。

如果可以修改命令以在每行上查看四個、五個或六個字元等,我將不勝感激。

非常感謝您的時間和幫助。我真的一直在努力解決這個問題。

  • MelBurslan,字元串的內容應該是無關緊要的,但上面的輸出 - 現在更正了 - 命令是我可以在英語鍵盤上輸入的每個字元。下面是兩個範例行。
k!>d#&)"EtXN`;*9TaD7BcL84z5[y{$Q?_Y%fCw6F0Vgn\|]ImqR.:1l<^}u'+Ms/hjS@e~2vxWO(3,bJiprP-=UAZGoHK
3'O$#Eg5&,`l>vn491M"cVZR\7J.H[XTw*:q}Kz8hf;W_P|i<6@CAytF^Dmkb]GBsU+{Y?xje%oIQ-~r!2Sap=/)N0du(L
  • 格倫,是的,四個字元串/鍵/令牌的第一個實例。我還需要匹配是可變的,以便我可以根據需要操縱字元匹配。
  • 萬用字元,這很好用,謝謝。
  • thrig,這非常有效,謝謝。

假設glenn jackman 對您問題的解釋是正確的,這裡有一個使用awkand的解決方案substr()

awk '{key = substr($0,1,4)}; !(key in printed); {printed[key]}' file

這會將“key”設置為一行的前四個字元,然後列印該行,除非它以前見過​​該鍵,然後跟踪該鍵已被列印的事實。

使用雜湊?

% (echo foo; echo bar; echo foobar) \
 | perl -ne '/(.{3})/; print unless $seen{$1}++'
foo
bar
% 

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