awk
обычно считывает каждую строку ввода и вызывает на ней сценарий.
Случаев использования getline
немного.
Когда сценарий выполняется с шестью строками ввода,
это обзор того, что происходит:
Чтение строки 1 обычно
Набор переменных
Вызовитеgetline
, который считывает строку 2
Сравнение переменныхОбычно считывайте строку 3
Набор переменных
Вызовитеgetline
, который считывает строку 4
Compare variablesОбычно считывайте строку 5
Set variables
Вызовитеgetline
, который считывает строку 6
Сравните переменные
Очевидно, что это не сработает.
Во-вторых, в коде awk
была допущена общая ошибка. В awk
,
поля из входных данных обозначаются как $ число
, а переменные - как имя _ переменной
.
Это отличается от сценариев оболочки,
где аргументы командной строки упоминаются как $ number
, а переменные - как $ variable _ name
.
Ваш тест
, если ($1! = $ path)
должно быть
, если ($1! = путь)
Ваш общий подход ошибочен. Невозможно определить последовательности, которые встречаются только один раз в файле просматривая одновременно две строки. Я считаю, что вы можете сделать это, глядя на три строки за раз (т.е. путем сохранения двух предыдущих строк в переменных), но такие вещи становятся сложными и беспорядочными. Наверное, проще считать случаи. Вот минимальное изменение в вашем сценарии, чтобы сделать это.
awk '{
если ($1! = путь) {
if (count = = 1) {
print prev
}
количество = 1
}
количество остальных++
prev = $0; путь = $1
}
КОНЕЦ {
if (count = = 1) {
print prev
}
}'
Я удалил тип
, так как вы никогда его не использовали.
Раскрытие: Это по существу то же самое, что последняя часть ответа Гленна.
Давайте разбьем вашу команду awk:
awk -vRS = '\r '(NR > 3) {gsub (/[ ()% | ]/, «»); напечатать $1; fflush ();} «»
Разделитель записей :\r, разделитель полей: [\t] +. Символы ()% | будут заменены пространствами. Вы берете первое поле.
На основе этого формата: [100%] 05: 31.227/05: 31.227 (43x), ETA 00: 00.000
[100]
Возможно, ваш неловкость должна быть чем-то более похожим:
awk -vRS = '\r '(NR > 3) {gsub (/[ ()% | [] ]/, «»); печать $1; fflush ();} '
Или даже лучше удалить позиционный аргумент: gawk -vRS = '\r' соответствует ($0 ,/( [0-9] +) %/, ary) {print ary [1]} '
Вы можете открыть графический терминал в любом из упомянутых путей:
Помимо открытия графического терминала,если вы хотите выглядеть действительно круто, введите Ctrl + Alt + F1, чтобы перейти к терминалу TTY. Вы обязательно получите все дамы, если вы знаете, что этот крутой трюк
Ctrl + Alt + F7 вернётся к графике (или иногда вам нужны Ctrl + Alt + F8).
Вы можете отправить вложение с mutt вот так:
"Body of email" | mutt -a query_output.xls -s "subject" -- me@Domain.com