Ваша команда
grep OpenFin LoginExcInternal.txt | grep Chrome LoginExcInternal.txt > test.txt
будет создавать только те строки из исходных данных, которые содержат строку Chrome
в любом месте строки. Это связано с тем, что результат первого grep
в конвейере вообще не будет обрабатываться правой стороной конвейера (, он будет просто отброшен ).
grep
при указании имени файла для чтения не будет обрабатывать стандартный входной поток. Именно в стандартный поток ввода поступает результат первого grep
.
sort -k2r LoginExcInternal.txt >test.txt
Вы хотите, чтобы строки с Chrome
во втором столбце шли после строк, содержащих OpenFin
в том же столбце. Вышеупомянутое делает это посредством сортировки исходных данных во втором столбце в обратном лексикографическом порядке.
Флаг -k2r
для sort
указывает утилите сортировать данные во втором столбце (и далее, если столбцов больше двух ), в обратном порядке (иr
). Если две строки имеют одинаковое значение во втором столбце, то в качестве ключа сортировки будет использоваться вся строка.
Строки с любыми другими значениями во втором столбце будут отсортированы с остальными строками и также будут частью вывода.
Если вы заботитесь об исходном порядке данных и не хотите его менять, а также предполагаете, что вы хотите извлечь только строки с этими двумя значениями во втором столбце (и без других значений )затем сделайте это в два этапа:
awk -v value='OpenFin' '$2 == value' LoginExcInternal.txt >test.txt
awk -v value='Chrome' '$2 == value' LoginExcInternal.txt >>test.txt
Это дважды применяет один и тот же код awk
к исходным данным с разными значениями переменной value
. Код выполняет сравнение строк во втором столбце (только )и печатает строки, имеющие указанное значение. Первый запуск скрипта awk
выполняет значения OpenFin
, а второй добавляет к этому строки Chrome
.
Это позволяет избежать использования первого столбца при сравнении данных.что было бы проблемой, если бы какое-либо из значений первого столбца оказалось Chrome
или OpenFin
. Кроме того, поскольку код awk
использует сравнение строк, он избегает вывода строк, второй столбец которых может содержать одну из строк в виде подстроки .
Хорошо.. так что я решил это:
trap
на ловушку ctrl
+ c
, установив trap 'chat_unloop' 2
chat_unloop(){
...
trap - 2
...
}
trap 'chat_unloop' 2
...
И это как-то сработало...
возможно, это потому, что trap
перехватывает только текущий процесс, но отправляет тот же сигнал подпроцессам
Так что спасибо всем, кто пытался мне помочь