cat blah | nl -w10 | sort -k2 | uniq -f1 | sort -nk1 | cut -sf2-
export HISTCONTROL=erasedups
export HISTIGNORE="&:mc:top:exit:mplayer *"
> И зачем тебе 100000 уникальных команд
> cat blah | nl -w10 | sort -k2 | uniq -f1 | sort -nk1 | cut -sf2-
> Сколько сорт|юник работает?
package main
import ( "os" "bufio" )
func read_strs() []string { var strs []string r := bufio.NewReader(os.Stdin) str, err := r.ReadString('\n') for err != os.EOF { strs = append(strs, str) str, err = r.ReadString('\n') } return strs }
func write_uniq(strs []string) { w := bufio.NewWriter(os.Stdout) for i, s := range strs { j := i + 1 for j < len(strs) && strs[j] != s { j++ } if j >= len(strs) { w.WriteString(s) } } w.Flush() }
func main() { strs := read_strs() write_uniq(strs) }
cat .bash_history | perl -e 'my %hash = (); while(<>){ print and $hash{$_} = "" if not defined $hash{$_} };'
module H = Hashtbl module L = List let tbl_add tbl line n = try let _ = H.find tbl line in () with Not_found -> H.add tbl line n let rec collect_lines n tbl = try let line = input_line stdin in tbl_add tbl line n; collect_lines (n+1) tbl with End_of_file -> tbl let unique_lines () = let to_list tbl = H.fold (fun k v l -> (k,v)::l) tbl [] in to_list (collect_lines 1 (H.create 50000)) let sort_by_number = L.sort (fun (k1,v1) (k2,v2) -> v1-v2) let output = L.iter (fun (l,_) -> output_string stdout (l ^ "\n")) let _ = output (sort_by_number (unique_lines ()))
type mapstr map[string]int
func read_strs() (strs []string) { r := bufio.NewReader(os.Stdin) str, err := r.ReadString('\n') for err != os.EOF { strs = append(strs, str) str, err = r.ReadString('\n') } return }
func write_strs(strs []string) { w := bufio.NewWriter(os.Stdout) for _, s := range strs { w.WriteString(s) } w.Flush() }
func uniq(strs []string) []string { m := make(map[string] int, 50000) k := len(strs) - 1 for i := k; i >= 0; i-- { _, ok := m[strs[i]] if !ok { m[strs[i]] = k k-- } } uniq_strs := make([]string, len(m)) for s, i := range m { uniq_strs[i - k - 1] = s } return uniq_strs }
func main() { strs := read_strs() write_strs(uniq(strs)) }
> чистить хистори по крону
> Вопрос, почему перловый скрипт у меня получился такой медленный при том же алгоритме, остался открытым. Ну да ладно.
module L = List module S = Set.Make(struct type t = string let compare = compare end) let unique_lines () = let rec loop set lst = try let line = input_line stdin in if S.mem line set then loop set lst else loop (S.add line set) (line::lst) with End_of_file -> lst in L.rev (loop S.empty []) let _ = L.iter (fun l -> output_string stdout (l ^ "\n")) (unique_lines())
let tbl_add tbl line n = try let _ = H.find tbl line in () with Not_found -> H.add tbl line n
H.replace tbl line n
tac hist1 | nl -w10 | sort -k2 | uniq -f1 | sort -nk1 | cut -sf2- | tac > hist2
tac hist1 | nl -w10 | sort -s -k2 | uniq -f1 | sort -nk1 | cut -sf2- | tac > hist2
> Перл у тебя проседает потому что ты в 9000 проходов это делаешь
> передаешь этот массив в какую-то левую не библиотечную функцию> меньше разрешений имен в каждой итерации, иногда даже значительный прирост дает
> расскажи сколько получается с >>9540
> В том числе вычищать оттуда дублирующиеся строки. При этом порядок оставшихся строк должен сохраняться
let yobaDistinct = Seq.mapi (curry id) >> Seq.distinctBy snd >> Seq.sortBy fst >> Seq.map snd
- hanabira 0.6.1320- + wakaba + futallaby + futaba -