net4me.net

Linux технологии, сети и электроника

Примеры работы в командной строке linux

Примеры использования linux утилит в различных ситуациях из жизни.
find, mount, rsync, xargs, echo и прочее прочее...
Постараюсь поддерживать порядок, но не обещаю классификации.

AWK tips

Заметки по работе с текстом

AWK

awk '/SIP\/[0-9]{3}+\-[a-z0-9]{8}/ {print $0...}'
egrep --color 'SIP\/[0-9]{3}+\-[a-z0-9]{8}'

# нечетные столбцы:
for X in {1..5}; do for Y in {1..10}; do echo -n "$Y "; done; echo; done | awk '{for(i=1;i<=NF;i+=2) print $i}' 

# подсчитать суммы по нечётным столбцам
$ for X in {1..5}; do for Y in {1..10}; do echo -n "$Y "; done; echo; done | awk '{print $0} {for(i=1;i<=NF;i+=2) s[i]+=$i} END{for (x in s) {printf "%s\t",s[x]} }'; echo
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10 
5	15	25	35	45

# условия при поиске
awk '/Install:|Remove:/ {print $0}' /var/log/apt/history.log
awk '/Inst[al:]|Remov[:e]/ {print $0}' /var/log/apt/history.log
awk '/Inst/||/Rem/ {print toupper($0)}' /var/log/apt/history.log

# FS OFS count
awk 'BEGIN{ FS=":"; OFS="\t\t"};{CNT++; print $1,$6,$7};END{print "Count:",CNT}' /etc/passwd

# найти строки, начинающиеся с 6ти цифр (или больше 6) и обрезать вывод до 6ти символов
awk '/^[0-9]{6}/ {print substr($1,0,6)}'

grep -c и awk

# Понадобилось получить количество совпадений (grep -c) а файлов много и это архивы и нужна сумма по всем. Куда ж без awk?
zgrep -ic "error" /var/log/*.gz | awk -F: '{SUM+=$2}{print "File="$1,"\tCount="$2,"\tSumNow="SUM} END{print "Total Sum="SUM}'

fzf

#наткнулся на такой поиск по тексту как fzf:
cat /etc/passwd|fzf
fzf -m # множественный выбор tab-ом.
# И такие штуки как рекурсивный поиск и множественный выбор с предпросмотром:
alias fff="ls -laHR | fzf -m --preview='echo user={3} when={-4..-2}; cat {-1}' --header-lines=1 | awk '{print $9}'"

пустые строки в файле


# убрать пустые строки помимо заезженного
echo -e "1\n\n    test\n    \n2"|grep -vE '^$'
# есть и
echo -e "1\n\n    test\n    \n2"|grep .

# убрать пустые строки и строки из табов и пробелов тоже:
echo -e "1\n\n    test\n    \n2"|grep '\S'
echo -e "1\n\n    test\n    \n2"|sed '/^\s*$/d'