LINUX.ORG.RU

Группировка


0

1

Как сгрупировать строки по первым цифрам в строке.

Например:
^DAN(«531687»,«187»,«62201.53739»,«6.01»)
^DAN(«531687»,«187»,«62201.53739»,«9.01»)
^DAN(«531687»,«187»,«62201.53739»,«10.01»)
^DAN(«531687»,«187»,«62201.53739»,«11.01»)
^DAN(«531687»,«187»,«62201.53739»,«70.01»)
^DAN(«531687»,«187»,«62201.53739»,«75.01»)
^DAN(«531687»,«187»,«62201.53739»,«80.01»)
^DAN(«531691»,«1»,«55204.50625»)
^DAN(«531691»,«1»,«55204.50625»,«1.01»)
^DAN(«531691»,«1»,«55204.50625»,«2.01»)
^DAN(«531691»,«1»,«55204.50625»,«3.01»)
^DAN(«531691»,«1»,«55204.50625»,«4.01»)
^DAN(«531691»,«1»,«55204.50625»,«5.01»)
^DAN(«531691»,«1»,«55204.50625»,«6.01»)
^DAN(«531691»,«1»,«55204.50625»,«7.01»)
^DAN(«531691»,«1»,«55204.50625»,«8.01»)
тут нужно получить уникальные числа первого «столбца»:
531687
531691

★★

откуда исходные данные берутся? текстовый файл? sql? если текст, не вижу проблем, читаешь построчно, выделяешь числа, отсеиваешь уникальные, или можно заинсертить в базу и групировать как душе угодно.

s0L
()
Ответ на: комментарий от s0L

Какой был вопрос - такой и ответ. ТС ни про то, откуда эти данные, ни чем он их парсит ничего не говорил.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от s0L

sOL > ни одного умного ответа, если не можете написать что-то стоящие покиньте пожалуйста мой топик

ddy_Em Не знал в какой раздел закинуть. Спасибо за sort, про него забыл, но мне сортировать не надо, а то вывод GB на 4 потянет (долговато будет), надо при выводе сравнивать первую строку со второй по первым цифрам, если отличается, то выводить... примерно так... на perl'е бы написал, но интересно как стандартными средствами (командами) linux'a типа grep, sort и т.д.

lioncub ★★
() автор топика
Ответ на: комментарий от lioncub

>ни одного умного ответа, если не можете написать что-то стоящие покиньте пожалуйста мой топик

задавай умные вопросы, будут умные ответы

s0L
()
columns=$(cat "input_file" | grep -o '("[0-9]*"' | sed 's/["(]//g')
for column in $columns; do if [ "$column" != "$last" ]; then last=$column; echo $column; fi; done

Не упрощал.

Ronnie-A
()
Ответ на: комментарий от Ronnie-A

Всем спасибо!

Сделал с помощью grep и sort:
grep -P «^\^DAN\(\»\d+" -o | sort -u

Ronnie-A Оригинально!

sOL Досвидания, умные ответы уже дали все кроме тебя! Если что-то не понятно - пересправшивай или не отвечай (и люди к тебе потянутся), а умничать в реале нужно, а не в инете.

lioncub ★★
() автор топика
Ответ на: комментарий от Ronnie-A

grep -P «^\^DAN\(\»\d+" -o | sort -u | grep -P «\d+» -o

а так мы получим только цифры, сделал второй командой, а то в один regexp закинуть не получилось

lioncub ★★
() автор топика
Ответ на: комментарий от lioncub

> Если что-то не понятно - пересправшивай или не отвечай (и люди к тебе потянутся), а умничать в реале нужно, а не в инете.

во первых это ты пришел сюда за помощью, а не я, во вторых мне не нужно чтобы ко мне кто-то тянулся, в третьих оставь при себе свои комплексы неполноценности

s0L
()
Ответ на: комментарий от lioncub

>умные ответы уже дали все кроме тебя!

да кстати, я не отвечаю по существу тупым хомячкам, которые не могут даже написать что им нужно

s0L
()

проще всего на awk`е..

BEGIN {
    FS="\""
}
{
    collect[$2]=1
}
END {
    for(x in collect)
        print x
}
можно и в однострочник сложить, но так нагляднее

MKuznetsov ★★★★★
()
Ответ на: комментарий от arsi

arsi > респект, надо взять на вооружение

lioncub ★★
() автор топика
$ cat ./test.txt 
^DAN("531687","187","62201.53739","6.01")
^DAN("531687","187","62201.53739","9.01")
^DAN("531687","187","62201.53739","10.01")
^DAN("531687","187","62201.53739","11.01")
^DAN("531687","187","62201.53739","70.01")
^DAN("531687","187","62201.53739","75.01")
^DAN("531687","187","62201.53739","80.01")
^DAN("531691","1","55204.50625")
^DAN("531691","1","55204.50625","1.01")
^DAN("531691","1","55204.50625","2.01")
^DAN("531691","1","55204.50625","3.01")
^DAN("531691","1","55204.50625","4.01")
^DAN("531691","1","55204.50625","5.01")
^DAN("531691","1","55204.50625","6.01")
^DAN("531691","1","55204.50625","7.01")
^DAN("531691","1","55204.50625","8.01")

$ cat ./test.txt | cut -d'"' -f2 | sort | uniq
531687
531691
Neksys ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.