Ответы пользователя по тегу AWK
  • Как при помощи awk или sed вытащить первую и последнюю строку вывода?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    первая и последняя строка с помощью awk
    ... |awk 'NR==1;END{print}'

    а чтобы два раза не вставать то можно сразу с нужными столбцами:
    awk '{x=$2" "$3" "$6" "$7" "$11}NR==1{print x}END{print x}' FILE
    Ответ написан
    Комментировать
  • Как прописать одинарную ковычку в awk -F'?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    awk -F"'" '{print $2}' test1.txt >> test2.txt
    хотя тут можно просто удалить через tr
    cat test1.txt | tr -d "'" >> test2.txt
    Ответ написан
    Комментировать
  • Как удалить лишние файлы в linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    создадим тестовую площадку:
    mkdir -p /tmp/TEST && touch "/tmp/TEST/backup-name-back-"{01..05}"-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-"{10..13}-{100..104}".bak" && tree /tmp/TEST

    вывод tree
    /tmp/TEST
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-104.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-104.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-104.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-02-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-100.bak
    ...
    ├── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-102.bak
    ├── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-103.bak
    └── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    
    0 directories, 100 files

    получим 100 файлов бэкапа

    теперь несколько однострочников
    прописываем полный путь к папке где хранятся бэкапы и заодно закинем список для сравнения в переменную Т
    DIR="/tmp/TEST"; T=$(ls $DIR/* |awk -F'[-.]' '{print $4" "$(NF-2)$(NF-1)";"$0}')

    показать что останется после удаления
    echo "$T" |sort -nr |sort -un |awk -F';' '{print $2}'

    показать что удалиться
    comm -3 <(echo "$T" |sort -n) <(echo "$T" |sort -nr |sort -un) |awk -F';' '{print $2}'

    !!! удаляем !!!
    rm $(comm -3 <(echo "$T" |sort -n) <(echo "$T" |sort -nr |sort -un) |awk -F';' '{print $2}')

    по итогу получим:
    $ tree /tmp/TEST
    /tmp/TEST
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-02-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-03-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-04-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    └── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    
    0 directories, 5 files
    Ответ написан
    1 комментарий
  • Замена с sed/awk только второго вхождения в определенной колонке csv. Как?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    awk 'BEGIN{FS=OFS=";"} {if($3 ~ /^[0-9]/) {$3=";"$3};print}'

    пример:
    a='4535;First Name Last Name;9995554443;0;0;0;9998887744
    4523;First Name Last Name;Some Comment //with numbers [etc];9995554443;0;0;0;9998887744'
    
    echo "$a" |awk 'BEGIN{FS=OFS=";"} {if($3 ~ /^[0-9]/) {$3=";"$3};print}' |csview -d';'
    ┌──────┬──────────────────────┬───────────────────────────────────┬────────────┬───┬───┬───┬─────────────┐
    │ 4535 │ First Name Last Name │                                   │ 9995554443 │ 0 │ 0 │ 0 │ 9998887744  │
    ├──────┼──────────────────────┼───────────────────────────────────┼────────────┼───┼───┼───┼─────────────┤
    │ 4523 │ First Name Last Name │ Some Comment //with numbers [etc] │ 9995554443 │ 0 │ 0 │ 0 │ 9998887744  │
    └──────┴──────────────────────┴───────────────────────────────────┴────────────┴───┴───┴───┴─────────────┘

    здесь используется простенькое условие что если третий($3) столбец начинается на цифру( ^[0-9]) то мы просто добавляем в начале данного столбца точку с запятой (;)
    Ответ написан
  • Парсинг файла bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    В скрипте bash я создаю переменную которая вытаскивает из этой строки S4BZJ045 следующим образом:
    SystemName=$(cat server_out.db | grep 'SystemName' | awk '{print $2}' )

    слишком многословная команда, можно сократить:
    SystemName=$(awk '/SystemName/{printf $2}' server_out.db)


    В ответ получаю NotOK, я понимаю, что проблема в лишних символах в переменной SystemName. Проверял через WC:

    скорее всего проблема в переводе строки, print в конце ставит \n, чтобы этого избежать используйте printf
    Ответ написан
    1 комментарий
  • Как с помощью awk вставить # в строчку 647?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Как с помощью awk вставить # в строчку 647?

    вставить куда ? начало, конец, посередине ?
    если в начало, то:
    awk -i inplace 'NR==647{print "# "$0}NR!=647' a.txt

    где изменения мы пишем(-i inplace) прямо во входящий файл, в строку(NR) 647, добавляя перед всей строкой($0) решетку с пробелом("# "), при желании можно и без пробела("#"). Остальные строки(NR!=647) мы просто печатаем без изменений.
    Ответ написан
    Комментировать
  • Awk, как объединить столбцы при передаче в shell?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $ echo "a1 a2 a3 15-Aug-2019 00:24:38 a6 ..." | awk '{z="date -d \""$4" "$5"\" \"+%s\""; z | getline z; print z}'
    1565817878

    ну или вывести в самой строке
    $ echo "a1 a2 a3 15-Aug-2019 00:24:38 a6 ..." | awk '{z="date -d \""$4" "$5"\" \"+%s\""; z | getline z; $4=z;$5="";print}'
    a1 a2 a3 1565817878  a6 ...

    немного покороче
    $ echo "a1 a2 a3 15-Aug-2019 00:24:38 a6 ..." | awk '{"date -d \""$4" "$5"\" \"+%s\""|getline $4;$5="";print}'
    a1 a2 a3 1565817878  a6 ...


    upd. (исправление)
    $ echo "a1 a2 a3 15-Aug-2019 00:24:38 a6 ..." | awk '{"date -d \""$4" "$5"\" \"+%s\"" | getline z; $4=z;$5="";print}'
    a1 a2 a3 1565817878  a6 ...
    Ответ написан
    4 комментария
  • Нужно открыть youtube в плеере VLC, в чём ошибка?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    погляжу народ обожает трудности
    x=($(youtube-dl -g https://www.youtube.com/watch?v=yfHQCNPTios)) && vlc ${x[0]} --input-slave ${x[1]}


    Чтобы открыть youtube 1080p в плеере VLC

    для этого нужно выставить нужные параметры в ключе --format
    x=($(youtube-dl -g --format="bestvideo[height<=?1080]+bestaudio" https://www.youtube.com/watch?v=yfHQCNPTios)) && vlc ${x[0]} --input-slave ${x[1]}

    подробнее об этом написал тебе в твоём предыдущем вопросе

    для mpv будет проще:
    mpv --ytdl-format="bestvideo[height<=?1080]+bestaudio" https://www.youtube.com/watch?v=yfHQCNPTios
    Ответ написан
    23 комментария
  • Как написать awk рулярку чтобы парсить цветной текст в выводе команд?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если на одной строке
    echo -e "\033[37;1;41m Красный \033[0m\n\033[37;1;43m Желтый \033[0m\n\033[37;1;42m Зелёный \033[0m"

    echo -e "\033[37;1;41m Красный \033[0m\n\033[37;1;43m Желтый \033[0m\n\033[37;1;42m Зелёный \033[0m" | awk '/\033\[37;1;41m/'


    если на нескольких строках
    echo -e "\033[37;1;41m Крас\nный \033[0m\n\033[37;1;43m Желтый \033[0m\n\033[37;1;42m Зелёный \033[0m"

    echo -e "\033[37;1;41m Крас\nный \033[0m\n\033[37;1;43m Желтый \033[0m\n\033[37;1;42m Зелёный \033[0m" | awk '/\033\[37;1;41m/,/\033\[0m/'


    в общем виде примерно так:
    behave | awk '/код начала цвета/,/код конца цвета/'
    Ответ написан
    5 комментариев
  • Использование утилиты GNU awk?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Моя первая цель взять IP и порты ...

    в каком виде вы хотите их получить ?
    по отдельности, вместе, через двоеточие, через пробел или еще как либо ?
    моя телепатия подсказывает что через пробел, если это действительно так то код будет выглядеть примерно так:
    ... | awk -F'[ ,:]' '{print $2,$3}'
    192.168.101.79 7001
    192.168.101.79 7000
    192.168.101.79 7000
    Ответ написан
    4 комментария
  • Как забрать переменные php в используя bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    awk -F'[",'"'"']' '/DBLogin =/ {print $2}' bconn.php
    Ответ написан
    Комментировать
  • Как выкусить подстроку из строки?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если " STRING-" и " PON " являются определяющими то можно сделать так:

    $ awk -F" STRING-| PON " '{print "STRING-"$2" PON "$3 }' | awk '{print $1" "$2" "$3}'  fileIn >> fileOut
    Ответ написан
    1 комментарий
  • Как скопировать строки по маске в новый файл целиком?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    предлагаю поставить gawk (gnu awk) и не мучатся :)
    если убунту то смотри здесь - https://www.howtoinstall.co/en/ubuntu/trusty/gawk

    тогда достаточно будет просто убрать вывод конкретного столбца заменив print $N на просто print:
    $ head -n1 pro3.csv > proOUT.csv
    $ awk -v N=1 -F"," '$N ~ /^[0-9]{11}$/ {print}' pro3.csv >> proOUT.csv
    Ответ написан
    4 комментария