Я сделал бы все это в жемчуге:
$ perl -F'\|' -ane '$k{$F[4]}++; print if $k{$F[4]}>1' file1 file2
Connect|20130320000025|UTC|PPP|test3@test3.co.uk|test1@test1.co.uk|0BCBE578|
-a
активирует автоматическое полевое разделение на массив @F
.-F'\|'
устанавливает разделитель полей для -a
кому: |
.0
в жемчуге) как ключ хеша ($k{$F[4]}++
и увеличьте его значение одним. Во второй раз, когда поле замечено, то значение будет 2.file1
прежде file2
) и распечатайте строку, если 5-е поле было замечено прежде, т.е. если $k{$F[4]}
больше, чем один. Это предполагает, что никакая пятая колонна не повторяется в том же файле. Если дело обстоит не так и некоторые столбцы может быть дублирован в том же файле, используйте это вместо этого:
perl -e 'open(A,"$ARGV[0]"); while(<A>){@F=split(/\|/);$k{$F[4]}++;}
open(B,"$ARGV[1]"); while(<B>){@F=split(/\|/); print if $k{$F[4]}
}' file1 file2
is_readable /path/to/file
написано test -r /path/to/file
или [ -r /path/to/file ]
или [[ -r /path/to/file ]]
. См. , использующую одинарные или двойные скобки - bash, чтобы узнать, чем они отличаются. is_writable
использует -w
.
Невозможность получить доступ к файлу - не очень хороший индикатор "нуждаемости в sudo". Возможно, вам придется запускаться от имени другого пользователя или группы, а не от имени root. Может случиться так, что на определённой системе способом получения доступа с правами root будет не запуск sudo
, а какой-то другой механизм (su
, calife
, ...). Тестирование доступа к файлу прекрасно на известной системе с известной конфигурацией. Если вы распространяете скрипты, которые это делают, имейте в виду, что это только эвристический, а не надежный тест, и позвольте пользователю легко переопределить ваши решения.
Обратите внимание, что только потому, что файл, прошедший проверку, читается как читаемый, не означает, что вы действительно сможете его прочитать. Разрешения на файл, возможно, за это время изменились. Иногда есть расхождения между тем, что говорят разрешения на файл, и тем, что на самом деле делают проверки доступа: удаленные файловые системы с причудливыми атрибутами, которые локальная файловая система не понимает, фреймворки безопасности, такие как SELinux, и т.д.
Вы можете попробовать выключатель -W
теста
Utillity:
[ -w /path/to/file ] && do_command /path/to/file || sudo do_command /path/to/file
или длинная версия:
if [ -w /path/to/file ]; then
do_command /path/to/file
else
sudo do_command /path/to/file
fi
Из Manpage
-w FILE
FILE exists and write permission is granted