Мне просто нужны данные, которые имеют уникальное значение, скажем, мы пишем файл журнала для мобильных пользователей
<mobile_number1>|20141006 06:15:26||AKQY6LYACZAA4O|12|3|BIHAR|
<mobile_number2>|20141006 06:16:05||AKQY6MAYAEQALE|12|22|UP EAST|
<mobile_number3>|20141006 06:16:39||AKQY6MQICY4BEQ|12|2|ASSAM|
<mobile_number4>|20141006 06:16:49||AKQY6LUIAE4ACI|12|1|ANDHRA PRADESH|
<mobile_number1>|20141006 06:17:53||AKQY6NFAAEYAJS|12|23|UP WEST|
<mobile_number6>|20141006 06:18:09||AKQY6M7ACY4ANG|12|18|ORISSA|
<mobile_number7>|20141006 06:18:54||AKQY6MWQCZAAME|12|20|RAJASTHAN|
<mobile_number1>|20141006 06:19:50||AKQY6N2ACZMA2K|12|1|ANDHRA PRADESH|
Теперь нам нужно получить уникальный номер мобильного телефона, подобный этому.
<mobile_number1>
<mobile_number2>
<mobile_number3>
<mobile_number4>
<mobile_number6>
<mobile_number7>
Попробуйте это:
sort -t '|' -k 1,1 -u yourFile | awk -F "|" '{print $1}'
, где:
-t '|'
использование |
как использование разделителя -k 1,1
первый столбец как ключ -u
получает уникальную строку с помощью ключа awk
печать, которая первый столбец и результат:
<mobile_number1>
<mobile_number2>
<mobile_number3>
<mobile_number4>
<mobile_number6>
<mobile_number7>
Этот сценарий работает, если каждая строка в yourFile
имеет mobile_number
как первый столбец, разделенный от остальных |
.
Выбрасывать все столбцы, но первое:
cut -d '|' -f 1
Для исключения повторяющихся строк:
sort -u
Вместе (с входом из файла):
cut -d '|' -f 1 <FILE> | sort -u
Это использует самые простые утилиты оболочки для выполнения задачи. Никакие интерпретаторы команд как awk
необходимый.
awk '!x[$1]++ {print $1}' FS="|" /path/to/file
пример:
[aneesh@mylap /]$ awk '!x[$1]++ {print $1}' FS="|" /tmp/test.txt
<mobile_number1>
<mobile_number2>
<mobile_number3>
<mobile_number4>
<mobile_number6>
<mobile_number7>