Как перезапустить рабочий стол Fedora + Cinnamon из командной строки?

Возможно, у вас проблема с буферизацией строк. Прикажите tcpdump и промежуточной grep команде(ам) буферизировать свои выходы следующим образом:

sudo tcpdump -l | grep --line-buffered -E '.dev:8888|ads' | grep -v 'adsl'

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

1
14.05.2019, 09:06
1 ответ

Предположим, что каждая строка вашего ввода (или по крайней мере каждая строка, начинающаяся с «К» )ровно 29 символов, Я смог продублировать желаемый результат с помощью

rev filename | paste filename - | awk '
{
        if (substr($0,1,1) == "K") {
                print substr($0,1,5) substr($0,39,17) substr($0,24,7)
        }
}'

Это

  • Запускает revвесь входной файл сразу.
    • Это, очевидно, обрабатывает каждую строку в файле через внешнюю программу. Вы выражаете беспокойство по поводу накладных расходов создания канала и вызова внешней программы один раз для каждой строки. Исходя из этого беспокойства, я считаю, что это разумный подход. Однако, если только несколько строк вашего ввода начинаются с «K», и стоимость обработки других линий высока, тогда это, возможно, нужно изменить.
    • revпроизводит ровно одну строку вывода для каждой строки ввода. Мое решение зависит от такого поведения в вашей внешней программе.
  • Объединяет (с использованиемpaste)входного файла с выходным файлом rev, строка за строкой. Для ваших образцов данных это выглядит так
    K1353 SF3987.7PD833391.4  KARE  ERAK  4.193338DP7.7893FS 3531K
    K1353 SF3987.2KD832231.4 MEAKE  EKAEM 4.132238DK2.7893FS 3531K
    K1332 IF4987.7RP832231.2 LEAOS  SOAEL 2.132238PR7.7894FI 2331K
    K1329 SF2787.7KD362619.3 NEDLE  ELDEN 3.916263DK7.7872FS 9231K
    K1353 SK3K84.3KD832231.3 PQAKM  MKAQP 3.132238DK3.48K3KS 3531K
  • awkчитает приведенные выше строки. Каждый содержит одну строку из входного файла объединяется с выводом revдля этой строки. awkзатем объединяет желаемые части каждого.


<разглагольствование>

Ваш вопрос немного бессвязен. Если я возьму ваш образец входных данных,

K1353 SF3987.7PD833391.4  KARE
K1353 SF3987.2KD832231.4 MEAKE
K1332 IF4987.7RP832231.2 LEAOS
K1329 SF2787.7KD362619.3 NEDLE
K1353 SK3K84.3KD832231.3 PQAKM

и передать его этому awkскрипту:

{
    RX=substr($0,6,9)
    RY=substr($0,15,9)
    printf("/%s/%s/\n", RX, RY)
}

Я получаю этот вывод:

/ SF3987.7/PD833391./
/ SF3987.2/KD832231./
/ IF4987.7/RP832231./
/ SF2787.7/KD362619./
/ SK3K84.3/KD832231./

Обратите внимание, что значение RXвключает пространство между первой и второй колонками, а значение RYне включает непоследний символ значения во втором столбце (т. е. цифра после второй точки ). Это действительно не имеет смысла, потому что

        sprintf("echo %s %s | %s", RX, RY, csmok)
Оператор

приводит к потере начального пространства в RX.

Как ни странно,этосоответствуетожидаемым результатам внизу вашего вопроса, но не с пятью абзацами выше, где вы говорите о выполнении

echo -e "SF3987.7 PD833391.4\nSF3987.2 KD832231.4\nIF4987.7 RP832231.2" | rev

т. е. вы включаете цифру после второй точки в строке, которую вы отправляете на rev.

И , вы извлекаете две не -перекрывающиеся (, но смежные )подстроки из $0, а затем вы отделяете outputот команды rev, все без надобности. Я могу продублировать ваши результаты с помощью

BEGIN {
  csmok="rev"
}

{
  type = substr($0,1,1)

  if (type == "K") {

    RXY=substr($0,6,18)

    cmd=sprintf("echo %s | %s", RXY, csmok)
    cmd | getline output
    close(cmd)
    sub(RXY,output)
    print
  }

}

т. е. извлечение одной 18-символьной подстроки -из $0и не разбивать строку output.

Пожалуйста, постарайтесь, чтобы данные в ваших вопросах были осмысленными и внутренне непротиворечивыми.


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

  • Первые три символа каждой строки — «K13». Это усложняет восприятие персонажей, которые отличаются друг от друга.
  • В трех из пяти строк первые пять символов (, т. е. все значение первого столбца )равно "K1353".
  • Значения во втором столбце 18 -символов длинных бессмысленных букв, цифр и точек, поэтому их трудно читать и понимать.
  • Просмотр значений во втором столбце :
    • В четырех строках из пяти оно начинается с «S».
    • В трех строках он начинается с «SF».
    • В трех строках третий символ — «3».
    • В четырех строках десятый символ — буква «D».
    • В трех строках девятый и десятый символы — «KD».
    • В четырех строках 11-й и 12-й символы — «83», а 16-й символ — «1».
    • В трех строках 11-й -16-й символ — «832231».

Я бы посоветовал вам опубликовать примеры данных, подобные этому:

ant 12345.hill  Adam
bat 31416.cave Bruce
cat 13579.meow Felix
dog 32768.bark Angus

При таких входных данных желаемый результат может содержать строки как «tac», «97531», «woem» и «xileF», и было бы легко для человека, чтобы посмотреть на них и увидеть, откуда они взялись. В отличие от «132238DK2», который требует от человека затрат шести-восьми минут с увеличительным стеклом, чтобы найти источник — почти как одна из тех головоломок «поиск слов». (Обратите внимание, что «132238DK» нельзя однозначно отследить, потому что «KD832231» появляется дважды.)

0
28.01.2020, 00:12

Теги

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