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

/ usr / local (со страницы man ) является домом для всех локальных исполняемых файлов, файлов и т.д. зависит от работы ОС, и обычно это указывает на то, что рассматриваемое программное обеспечение было создано через систему портов или установлено менеджером пакетов. Например, и bash, и zsh предоставляются необязательно и должны быть добавлены после простой установки, поэтому они живут там.

При соблюдении строгой иерархии программного обеспечения для конкретных ОС и другого программного обеспечения автоматизация обновлений и исправлений ОС становится проще. Таким образом, это не сильно отличается от использования каталога для различения пользовательских сценариев и настроек. Однако вам может не хватать того, что система портов на FreeBSD намного шире по своему охвату - это то, как вы настраиваете свою систему BSD, а не просто набор дополнительного программного обеспечения.

Лучше всего избегать установки непроверенного программного обеспечения для всех пользователей, которого еще нет в дереве портов. Если он проприетарный, он должен быть установлен в / usr / local / . Если нет, почему бы не создать собственный порт ?

1
27.12.2016, 05:16
3 ответа
awk 'NR==FNR{A[NR]=$0;next}{if($0==A[FNR]){print $0 "is matching. it is ok"}else{print $0 "is not matching. please check"}}' file1.txt file2.txt

читаемый формат

awk 'NR==FNR{
A[NR]=$0;
next
}
{
if($0==A[FNR])
{
    print $0 "is matching. it is ok"
}
else{
print $0 "is not matching. please check"
}
}' file1.txt file2.txt
1
27.01.2020, 23:19

С awk:

awk 'NR==FNR{a[$1]=$2; next}; $2==a[$1] {print $1 " OK"; next} \
                                        {print $1 " Not OK"}' f1.txt f2.txt
  • NR==FNR верно только для первого файла, f1. txt здесь; мы создаем массив a с первым полем в качестве ключа и вторым полем в качестве значения, next переходит к следующей записи, не двигаясь дальше вниз по условию

  • $2==a[$1] проверяет, совпадает ли второе поле второго файла, f2. txt совпадает со значениями ключевого первого поля массива a, а затем печатает в нужном формате

Пример:

% cat f1.txt
abc 123
bcd 234
cde 345

% cat f2.txt
abc 123
bcd 223
cde 234

% awk 'NR==FNR{a[$1]=$2; next}; $2==a[$1] {print $1 " OK"; next} {print $1 " Not OK"}' f1.txt f2.txt
abc OK
bcd Not OK
cde Not OK
2
27.01.2020, 23:19

код @ Kamaraj был обновлен. Пожалуйста, замените строки:

print $0 "is matching. it is ok"
print $0 "is not matching. please check"

на

split($0,a,/ /); print a[1] " is matching. it is ok"
split($0,a,/ /);print a[1] " is not matching. please check"

или напечатайте $ 1 "совпадает. Это нормально" {{1 }} print $ 1 "не соответствует. Пожалуйста, проверьте"

Весь сценарий будет:

awk 'NR==FNR{
A[NR]=$0;
next
}
{
if($0==A[FNR])
{
split($0,a,/ /); print a[1] " is matching. it is ok"
}
else{
split($0,a,/ /);print a[1] " is not matching. please check"
}
}' file1.txt file2.txt

TIMES:

@heemayl real 0m0.159s user 0m0.000s { {1}} sys 0m0.046s

@Kamaraj real 0m0.102s user 0m0.000s sys 0m0.031s с разделением

@Kamaraj real 0m0.099s user 0m0.000s sys 0m0.062s с $ 1

Спасибо @Kamaraj.

1
27.01.2020, 23:19

Теги

Похожие вопросы