2017-01-02 3 views
1

Я работаю над большим набором данных, и мне нужно указать и напечатать числовой порядок для каждого уникального идентификатора ($ 1) и удалить строки выше 335 числовой порядок для каждого уникального идентификатора.Как я могу задать числовой порядок для каждой строки на основе уникального идентификатора

Данные выглядит

101 24 
101 13 
101 15 
102 25 
102 21 
102 23 
103 20 
103 12 
103 18 

Выход выглядит следующим образом

101 24 1 
101 13 2 
101 15 3 
102 25 1 
102 21 2  
102 23 3 
103 20 1 
103 12 2 
103 18 3   
+0

Насколько большой набор данных? –

+0

@James Данные содержат более 11 миллионов строк и 24 поля. – Alula

+0

@Alula Является ли файл отсортированным по первому полю, так что все строки с одинаковым значением находятся в одном месте в файле? –

ответ

4

Попробуйте менее одного

вход

$ cat f 
101 24 
101 13 
101 15 
102 25 
102 21 
102 23 
103 20 
103 12 
103 18 

Выходной

$ awk '{print $0,++a[$1]}' f 
101 24 1 
101 13 2 
101 15 3 
102 25 1 
102 21 2 
102 23 3 
103 20 1 
103 12 2 
103 18 3 

Если данные отсортированы (column1), затем используйте ниже один, быстрее

$ awk '$1!=p{n=0}{print $0,++n; p=$1}' f 
101 24 1 
101 13 2 
101 15 3 
102 25 1 
102 21 2 
102 23 3 
103 20 1 
103 12 2 
103 18 3 

Чтобы удалить идентификатор выше 335

$ awk '$1!=p{n=0; p=$1}++n<335{print $0,n}' f 


$ awk '++a[$1]<335{print $0,a[$1]}' f 
+0

Может ли он удалять строки выше 335 числового порядка для каждого уникального идентификатора? – Alula

+1

По-видимому, мое решение было таким же, как и последнее ++. Используйте последний так или иначе, он потребляет меньше памяти. –

+1

@JamesBrown брат случается иногда, может быть несколько секунд, прежде чем вы отправили :) –

Смежные вопросы

 Смежные вопросы