GREP в отдельной статье
tr, CUT
Подмена всех пробелов (в том числе повторяющихся) на одну запятую с использованием опции -s.
-s Squeeze multiple occurrences of the characters listed in the last operand (either string1 or string2) in the input into a single instance of the character. This occurs after all deletion and translation is completed.
$ ls -lh total 32 drwx------+ 7 petrredkin staff 224B Mar 24 18:33 Desktop drwx------+ 8 petrredkin staff 256B Mar 21 22:24 Documents drwx------+ 7 petrredkin staff 224B Apr 4 09:24 Downloads drwx------@ 90 petrredkin staff 2.8K Apr 1 08:34 Library drwx------ 4 petrredkin staff 128B Mar 24 16:20 Movies drwx------+ 3 petrredkin staff 96B Mar 21 20:08 Music drwx------+ 4 petrredkin staff 128B Mar 21 20:10 Pictures drwxr-xr-x+ 4 petrredkin staff 128B Mar 21 20:08 Public drwxr-xr-x@ 6 petrredkin staff 192B Mar 24 16:02 Yandex.Disk.localized $ ls -lh | tr -s " " "," total,32 drwx------+,7,petrredkin,staff,224B,Mar,24,18:33,Desktop drwx------+,8,petrredkin,staff,256B,Mar,21,22:24,Documents drwx------+,7,petrredkin,staff,224B,Apr,4,09:24,Downloads drwx------@,90,petrredkin,staff,2.8K,Apr,1,08:34,Library drwx------,4,petrredkin,staff,128B,Mar,24,16:20,Movies drwx------+,3,petrredkin,staff,96B,Mar,21,20:08,Music drwx------+,4,petrredkin,staff,128B,Mar,21,20:10,Pictures drwxr-xr-x+,4,petrredkin,staff,128B,Mar,21,20:08,Public
(Linux работа с текстом – tr, sort, cut, Linux спец. символы) в bash передача в консоль TAB делается через ctrl+v и после этого нажатия на TAB. С помощью tr можно подменить любой символ/последовательность на TAB, используя delimiter TAB можно отсортировать значения sort (-t), используя cut выделить столбцы по delimiter TAB (-d) (аналогично можно и AWK).
$ ls -ltr | tr -s ' ' ' ' | sort -t ' ' -k 5n | cut -d ' ' -f 5,9 15 dir_lst.txt 17 sw 32 ping_list.txt 32 ping_list2.txt 64 dir1 64 dir2 64 dir3 96 Music 128 Movies 128 Pictures 128 Public 192 Yandex.Disk.localized 224 Downloads 224 Desktop 256 Documents 2880 Library
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
(Linux работа с текстом – tr, sort, cut, Linux спец. символы) в bash передача в консоль TAB делается через ctrl+v и после этого нажатия на TAB. С помощью tr можно подменить любой символ/последовательность на TAB, используя delimiter TAB можно отсортировать значения sort (-t), используя cut выделить столбцы по delimiter TAB (-d) (аналогично можно и AWK).
$ ls -ltr | tr -s ' ' ' ' | sort -t ' ' -k 5n | cut -d ' ' -f 5,9 15 dir_lst.txt 17 sw 32 ping_list.txt 32 ping_list2.txt 64 dir1 64 dir2 64 dir3 96 Music 128 Movies 128 Pictures 128 Public 192 Yandex.Disk.localized 224 Downloads 224 Desktop 256 Documents 2880 Library
TEE
Tee – очень удобная, но часто забываемая утилита (по крайней мере мной). Удобство в том, что она позволяет как отображать STDOUT в shell, так и писать в файл одновременно.
$ cat ping_list.txt | tee ping_list2.txt 1.1.1.1 8.8.8.8 4.4.8.8 8.8.4.4 $ cat ping_list2.txt 1.1.1.1 8.8.8.8 4.4.8.8 8.8.4.4
Заменяем “echo “fdsfdsf” > file”, на echo + pipe + tee. Извращение взято отсюда.
echo "<html><body><h2>Welcome to Azure! My name is $(hostname).</h2></body></html>" | tee -a index.html