Создание файла .XLS в качестве выходного файла запроса sqlplus и отправка этого файла .XLS в виде вложения в электронное письмо

  1. awk обычно считывает каждую строку ввода и вызывает на ней сценарий. Случаев использования getline немного. Когда сценарий выполняется с шестью строками ввода, это обзор того, что происходит:

    Чтение строки 1 обычно

    Набор переменных
    Вызовите getline , который считывает строку 2
    Сравнение переменных

    Обычно считывайте строку 3

    Набор переменных
    Вызовите getline , который считывает строку 4
    Compare variables

    Обычно считывайте строку 5

    Set variables
    Вызовите getline , который считывает строку 6
    Сравните переменные

    Очевидно, что это не сработает.

  2. Во-вторых, в коде awk была допущена общая ошибка. В awk , поля из входных данных обозначаются как $ число , а переменные - как имя _ переменной . Это отличается от сценариев оболочки, где аргументы командной строки упоминаются как $ number , а переменные - как $ variable _ name . Ваш тест

    , если ($1! = $ path)
    

    должно быть

    , если ($1! = путь)
    
  3. Ваш общий подход ошибочен. Невозможно определить последовательности, которые встречаются только один раз в файле просматривая одновременно две строки. Я считаю, что вы можете сделать это, глядя на три строки за раз (т.е. путем сохранения двух предыдущих строк в переменных), но такие вещи становятся сложными и беспорядочными. Наверное, проще считать случаи. Вот минимальное изменение в вашем сценарии, чтобы сделать это.

     awk '{
    если ($1! = путь) {
    if (count = = 1) {
    print prev
    }
    количество = 1
    }
    количество остальных++
    prev = $0; путь = $1
    }
    КОНЕЦ {
    if (count = = 1) {
    print prev
    }
    }'
    

    Я удалил тип , так как вы никогда его не использовали.

    Раскрытие: Это по существу то же самое, что последняя часть ответа Гленна.

-121--74015-

Давайте разбьем вашу команду 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]} '

-121--195302-

Вы можете открыть графический терминал в любом из упомянутых путей:

  1. Нажмите кнопку «start» и введите «terminal»
  2. Нажмите клавишу Windows (она же Meta key), чтобы открыть средство запуска команд, и введите «terminal» или «gnome-terminal»
  3. Откройте кнопку «start», чтобы найти терминал.

Помимо открытия графического терминала,если вы хотите выглядеть действительно круто, введите Ctrl + Alt + F1, чтобы перейти к терминалу TTY. Вы обязательно получите все дамы, если вы знаете, что этот крутой трюк

Ctrl + Alt + F7 вернётся к графике (или иногда вам нужны Ctrl + Alt + F8).

-1
14.06.2018, 07:50
1 ответ

Вы можете отправить вложение с mutt вот так:

"Body of email" | mutt -a query_output.xls  -s "subject" -- me@Domain.com
0
28.01.2020, 05:12

Теги

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