GREP в отдельной статье
SED
Удаляем первую, первую + пятую строки
sed 1d <file> sed '1d;5d' <file>
Удаление пустых строк (Sed delete empty lines)
sed '/^ *$/d' sw # базовый вариант sed '/^[[:space:]]*$/d' # любой whitespace как пустое место sed -r '/^\s*$/d'
sed '/3007791/q'
sed с whitespace и cat -v + tr может использоваться для удаления ^M в разных выгрузках из Windows.
cat -v sw | tr "^M" " " sed 's/[[:space:]]$//g' sw
Groups с sed – не забываем про экранирование спец. символов. Например, добавляем пробелы после каждого символа:
# echo "12345" | sed 's/\(.\)/\1 /g' 1 2 3 4 5
AWK
awk – очень сильный инструмент и полноценный скриптовый язык программирования.
Помимо “стандартного” отображения определенного столбца с возможностью задания delimiter с помощью него можно искать текст (замена grep), сортировать его (замена sort), исключать дубли (замена uniq), делать сводки, аналогичные excel.
В awk скриптах можно создавать массивы, циклы, условия.
Практика
delimeter
-F – указать разделитель ввода.
Разделитель может быть не символ, а целый набор символов и даже фраз:
awk -F'->' '{print $2}' test | awk -F'тест тест' '{print $1}'
OFS – указать разделитель вывода. По умолчанию AWK подменяет delimiter на пробел, даже при использовании -F. Используя OFS можно задать разделитель вывода или сохранить разделитель файла. Очень удобно при работе с CSV.
awk -F'\t' '{OFS=";"} {print $1,$2,$3}'
awk as a grep
Заменяем grep на awk (grep open = /open/):
nmap -T5 -PN -p 80 -oG - $1 | awk '/open/{print $2}'
last column
Удалить первый столбец из файла (вывода):
awk '{$1=""}1'
Удалить последний столбец из файла:
awk '{$NF=""}1'
Удалить три последних столбца из файла:
awk '{$NF="";$(NF-1)="";$(NF-2)="";$(NF-3)=""}1'
randomize string
cat <file> |awk '{print rand()"\t"$0}' |sort |awk -F'\t' '{print $2}'
чтение с конца
tac <file> # удобно для чтение лог-файла
агрегирующая функция
простейшая – складываем все значения в столбце
$ cat >123 1 2 3 4 5 55 $ cat 123 | awk '{ CNT +=$1 } END { print CNT; }' 70
аналог саммари сводного отчета Excel
awk '{a[$1]+=$2} END{for (i in a) print a[i],i}' $ cat sw str 5 btr 1 str 7 btt 4 btr 31 str 11 $ cat sw | awk '{a[$1]+=$2} END{for (i in a) print a[i],i}' | awk '{print $2,$1}' | sort -n -k 2 # с сортировкой по возрастанию btt 4 str 23 btr 32
AWK + PRINTF + INTERACTIVE AWK – аналог нижестоящей функции Column – вывод данных в стобцах с фиксированных для столбцов размером с указанием размера каждого столбца. Кроме того испольуется interactive AWK, который позволяет работать с выводом tail без буфферизации (т.е. вывод попадает сразу на обработку без ожидания объема).
tail -f Test.csv | awk -W interactive -F ';' '{printf "%20s %20s %20s %20s \n", $1,$3,$6,$12}'
COLUMN
column -t – крайне полезная утилита и опция для представления данных в табличном виде.
cat sw 1 2 3 213123 1 1 1 454535 5 4 11 43423432
uniq
sort -u – сортировка и сохраненик уникальных записей
uniq – сохранение уникальных записей без сортировки
awk '!a[$0]++'
Sort
sort -t \; -k 4n -k 5 -k 8 /home/user/report.csv
TEE
Заменяем “echo “fdsfdsf” > file”, на echo + pipe + tee. Извращение взято отсюда.
echo "<html><body><h2>Welcome to Azure! My name is $(hostname).</h2></body></html>" | tee -a index.html