LINUX.ORG.RU

Сравнение массивов

 ,


0

2

Добрый день. Есть два файла: file1.txt, file1.txt.bak. В обоих файлах есть массив client_id со списком клиентов.
Например, client_id = ( 1 4 8 10 )
client_id = ( 1 7 4 10 30 )
Нужно сравнить эти два массива и получить два списка:
1. Список тех элементов которых, нету в первом массиве ( 7 30 )
2. Список тех, элементов которых нету в втором массиве ( 4 8 )
Как это сделать?



Последнее исправление: danacn (всего исправлений: 1)

google://bash+array+compare

anonymous
()
$ cat file1.txt
client_id = ( 1 4 8 10 )
$ cat file1.txt.bak 
client_id = ( 1 7 4 10 30 )
$ cat array.sh
#!/bin/bash
Files="file1.txt file1.txt.bak"
c=1

for f in $Files; do
    > tmp.$c
    grep client_id "$f" | grep -oE "[[:digit:]]*" | sort > tmp.$c
    ((c++))
done

for i in 1 2; do
    echo "Not in $i: $(comm -3$i tmp.{1,2} | sort -g | tr '\n' ' ')"
done
$ ./array.sh 
Not in 1: 7 30 
Not in 2: 8
nerve ★★
()

А нельзя сделать по-человечески? В файлы записать данные в столбик и использовать стандартные инструменты типа comm?

legolegs ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.