Кусок файла примера zxc1.csv:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
name;date;ip;allow;blok printer;15;192.168.0.1;yes;no printer;15;192.168.0.4;yes;no printer;15;192.168.0.4;yes;no printer;15;192.168.0.1;yes;no printer;15;192.168.0.1;yes;no printer;15;192.168.0.1;yes;no printer;15;192.168.0.1;yes;no printer;15;192.168.0.7;yes;no printer;15;192.168.0.1;yes;no printer;15;192.168.0.1;yes;no printer;15;192.168.0.7;yes;no printer;15;192.168.0.1;yes;no printer;15;192.168.0.1;yes;no printer;15;192.168.0.1;yes;no printer;15;192.168.0.1;yes;no printer;15;192.168.0.7;yes;no printer;15;192.168.0.1;yes;no printer;15;192.168.0.1;yes;no Решение: cat zxc.csv | cut -f 3 -d";" | sort | uniq awk -F ';' '{ print $1,$3 }' zxc.csv | sort | uniq |
Кусок файла примера zxc1.csv:
1 2 3 4 5 6 7 8 9 10 |
Алексей,+2 (522) 7234-246-57 Александр,+3 (234944) 123-73-33 Ярослав,+4 (455) 62205-111-87 Максим,+5 (315) 51014-656-923 Дмитрий,+6 (2062) 6434-994-2983 Алексей,+7 (927435) 40302-1945-39844 Решение: cat zxc1.csv | sed 's/ //g' | sed 's/-//g' | sed 's/(//' | sed 's/)//g' | sed 's/+//g' | sed 's/,/ /g' cat zxc1.csv | sed -e '{s/-//g}' -e '{s/(//g}' -e 's/)//g' -e '{s/+//g}' -e '{s/ //g}' -e '{s/,/ /}' |
Примеры sed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
sed 's/string1/string2/g' example.txt - заменить string1 на string2 в файле example.txt и вывести содержимое sed '/ *#/d; /^$/d' example.txt - удалить пустые строки и комментарии из файла example.txt sed '/^$/d' example.txt - удалить пустые строки и комментарии из файла example.txt sed '/serv*/a\ \' - добавить пустую строку после слова serv sed 's/serv/\nserv/' - добавить строку перед словом serv sed -e '1d' exampe.txt - удалить первую строку из файла example.txt sed -n '/string1/p' - отобразить только строки содержащие string1 sed -e 's/string//g' example.txt - удалить строку string1 из текста файла example.txt не изменяя всего остального sed -e 's/ *$//' example.txt - удалить пустые символы в конце каждой строки файла example.txt sed -n '5p;5q' example.txt - вывести пятую строку sed -n '2,5p' example.txt - вывести строки со второй по пятую sed -e 's/00*/0/g' example.txt - Заменить последовательность из любого количества нулей одним нулём Примем убираем пробелы, знаки"()+-", в конце знак "," заменяем на пробел: cat zxc1.csv | sed 's/ //g' | sed 's/-//g' | sed 's/(//' | sed 's/)//g' | sed 's/+//g' | sed 's/,/ /g' > rasilka.csv.edit Используем специальный ключ "-e" убираем пробелы, знаки"()+-", в конце знак "," заменяем на пробел cat zxc1.csv | sed -e 's/ //g' -e 's/-//g' -e 's/(//g' -e 's/)//g' -e 's/+//g' -e 's/,/ /g' sed - пример шаблонов --------------------- 8d - удалить 8-ю строку /^$/d - удалить все пустые строки 1,/^$/d - удалить все строки до первой пустой строки, включительно /Jones/p - вывести строки, содержащие "Jones" (с ключом -n) s/Windows/Linux/ - в каждой строке, заменить первое встретившееся слово "Windows" на слово "Linux" s/BSOD/stability/g - в каждой строке, заменить все встретившиеся слова "BSOD" на "stability" s/ *$// - удалить все пробелы в конце каждой строки s/00*/0/g - заменить все последовательности ведущих нулей одним символом "0" /GUI/d - удалить все строки, содержащие "GUI" s/GUI//g - удалить все найденные "GUI", оставляя остальную часть строки без изменений 's/:.*//' - удалить от все последующие символы после двоеточия(:) -------------------- |
Примеры работы с cut, sort, unic, sed, awk, tr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
cat zxc.csv | cut -f 3 -d";" | sort | uniq Поясним про (cut -f 3 -d";") в данном примере: (-f 3) выбор столбца 3 (-d";") выбор разделителя (;) Поясним про (sort), он не обходим что бы работа (uniq) была выполнена правильно Поясним про unic - покажет уникальные значения cat zxc.csv | sort | uniq | cut -d ";" -f1,3 | sed "s/;/ /g" Поясним про (sort) - выполняет сортировку Поясним про (unic) - покажет уникальные значения Поясним про (cut -d ";" -f1,3) в данном примере: (-f1,3) выбор столбца 3,4 (-d";") выбор разделителя (;) Поясним про (sed "s/;/ /g"), тут выполняется поиск символа ";" и замена на символ пробела " " cat zxc.csv | sort | uniq | cut -d ";" -f1,3 | sed "s/;/ /g" > zxc2.txt - выполняем (sort,unic,cut,sed) и сохранение в файл zxc2.txt sed -i 's/printer/robot/g' zxc2.txt - ищем в файле (zxc2.txt) слово (printer) меняем его на (robot) sed -i 's/robot/slon/1' zxc2.txt - ищем в файле (zxc2.txt) слово (robot) меняем его на (slon) awk -F ';' '{ print $1,$3 }' zxc.csv | sort | uniq - с помощью (awk -F ';' '{ print $1,$3 }' zxc.csv ) выводим на экран 1 и 2 столбцы из файла zxc.csv, сортируем, показываем уникальные строки cat zxc.csv | sed -e 's/;/ /g' | cut -d ' ' -f 1,3 | sort | uniq cat zxc.csv | awk -F';' '{print $1,$3}' | sort | uniq cat zxc.csv | sed -e 's/;/ /g' | cut -d ' ' -f 1,3 | sort | uniq cat zxc1.csv | sed -e '{s/-//g}' -e '{s/(//g}' -e 's/)//g' -e '{s/+//g}' -e '{s/ //g}' -e '{s/,/ /}' cat zxc.csv | awk -F ';' '{print $1,$3}' | sort | uniq cat zxc.csv | cut -f 1,3 -d ';' | sed 's/;/ /g' | sort | uniq cat zxc.csv | cut -f 1,3 -d ';' | tr ';' ' ' | sort | uniq history | cut -c 8-120 ps -uax | awk -F ' ' '{print $1,$2,$11}' ls -latr | awk -F ' ' '{print $3,$9}' ls -hlatr | awk -F ' ' '{print $5,$3,$9}' | grep M | sort -u |
Регистр:
1 2 |
echo 'word' | tr '[:lower:]' '[:upper:]' - перевести символы нижнего регистра в верхний echo 'word' | tr '[:upper:]' '[:lower:]' - перевести символы верхнего регистра в нижний |
Ещё один пример достать нужное
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
1.txt ----- mv: cannot stat '/etc/bareos/bareos-dir.d/catalog': No such file or directory mv: cannot stat '/etc/bareos/bareos-dir.d/director': No such file or directory mv: cannot stat '/etc/bareos/bareos-dir.d/messages': No such file or directory mv: cannot stat '/etc/bareos/bareos-dir.d/user': No such file or directory mv: cannot stat '/etc/bareos/bareos-dir.d/fileset': No such file or directory mv: cannot stat '/etc/bareos/bareos-dir.d/client': No such file or directory mv: cannot stat '/etc/bareos/bareos-dir.d/job': No such file or directory mv: cannot stat '/etc/bareos/bareos-dir.d/jobdefs': No such file or directory mv: cannot stat '/etc/bareos/bareos-dir.d/pool': No such file or directory mv: cannot stat '/etc/bareos/bareos-dir.d/schedule': No such file or directory mv: cannot stat '/etc/bareos/bareos-dir.d/storage': No such file or directory mv: cannot stat '/etc/bareos/bareos-dir.d/use': No such file or directory ---- Достаем серединку: cat 1.txt | cut -c `echo "mv: cannot stat " | wc -c`-`echo "mv: cannot stat '/etc/bareos/bareos-dir.d/schedule':"| wc -c` | sed -e "s/'//g" -e 's/:.*//' cat 1.txt | cut -d "'" -f 2 cat 1.txt | awk -F"'" {print $2} |
awk вставка текста в начало / конец строки
1 2 3 4 5 |
cat file.txt | awk '{print "xxx " $0}' cat file.txt | awk '{print $0 " xxx"}' cat file.txt | awk '{print "xxx " $0 " xxx"}' cat file.txt | awk '{print $1}' | awk '{print "xxx " $0}' |
AWK. Пример с пингом
1 2 3 4 |
Пингуем хосты с помощью программы fping и результат записываем в файл test_ping.txt for x in `seq 2 254`; do fping -c1 192.168.1.${x}; done >> test_ping.txt Парсим файл и там где хост пинговался в вывод добавляем ok. cat test_ping.txt | awk "/ 0% loss/" | awk -F ':' '{print $1 "ok"}' |
sed еще примеры:
1 2 3 4 5 |
sed -n /root/p /etc/passwd - вывести строку содержавшие слово root, работает аналогично "grep root /etc/passwd" sed 10q /etc/passwd - вывести первых 10 строк, работает аналогично head sed -i.orig s/^alias/#alias/ file_name - заменить все строки которые начинаются на слово alias на #alias, при этом будет создана резервная копия file_name.orig sed -i.orig /^alias/s/^/#/ - сначала ищем все слова которые начинаются на alias, потом заменяем символ начало строки "^" на решётку "#" sed -e /^#/d -e '/^$/d' file_name - показываем файл без комментариев и пустых строк |
awk (оук?) еще примеры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
awk '{print "Hello"}' - если дальше продолжать нажимать Enter, то будет выводится Hello Чем отличается перенаправление в cat "EOF" - слова на которое завершится вставка текста cat << "EOF" > filename1 - при такой передаче есть возможность использовать и передавать переменные bash как своим так и встроенные $1,$2, $?, $i cat > filename1 << "EOF" - такая конструкция исключает передачу переменных, файл будет передан как есть Пример создаём файл filename1 cat << "EOF" > filename1 { Hello } EOF awk -f filename1 - открыв таким образом файл filename1 и если там будет скрипт выше, то мы получим эффект команды awk '{print "Hello"}' awk /^root/{print} /etc/passwd - аналогично grep, покажет строку которая содержит слово root ip a | awk /link/{print} - напечатать строку которая содержит слово link ip a | awk '{print}NR==3{exit}' - напечатать 3 строки, аналогично "ip a |head -n 3" ip a | awk 'END{print NR}' - аналогично команды "ip a | wc -l" ip a | awk '{print $2}' - вывести второй столбец ip a | awk '/^4/{print $1}' - вывести из первого столбца то что начинается на 4 Немного про спец символы в awk $0 - весь файл (в баше это сам файл) $1 - первый аргумент, выведет слова первой строки ... $9 - девятый аргумент, выведет слова девятой строки awk '{print $0}' /etc/passwd - будет выведен весь файл, эффект как от cat /etc/passwd awk -F: '{print $1,$3}' /etc/passwd - выведет первый и 3 столбик из файла awk -F: '/root/{print $1, $4, $7}' /etc/passwd - найти строку содержанию слово root и вывести 1,4,7 столбики Пример с заменой echo "one two tree nice 1" | awk '{$1="1"; $3="3"; $5="five"; print $0}' Параметры BEGIN и END Пример скрипта для awk cat > filetest << "EOF" BEGIN { print "Start" } {print $1} END { print "The end" } EOF Пример использования скрипта выше: awk -F: -f filetest /etc/passwd Еще один пример с BEGIN и END FS: аналог awk -F: awk 'BEGIN { print "login \t home"; FS=":"} {print $1 "\t" $6} END {print "END file"}' /etc/passwd Еще один пример BEGIN и END с заменой разделителя ":" на "%" awk 'BEGIN{FS=":"; OFS="%"} {print $1, $4, $3}' /etc/passwd Элементы ARGC(C- коунтер) и ARGV(V- валею) awk 'BEGIN{print ARGC, ARGV[0]}' awk 'BEGIN{print ARGC, ARGV[1]}' /etc/passwd awk 'BEGIN{print ARGC, ARGV[1], ARGV[0]}' /etc/passwd Элемент ENVIRON env - тут можно увидеть все текущие переменные awk 'BEGIN{print ENVIRON["HOME"]}' awk 'BEGIN{print ENVIRON["PATH"]}' |
awk \ условия \ циклы \ if \ else \ for
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Пример if для awk cat > test << "EOF" { if ($1 < 2) { print 1 } else if ($1 < 22) { print 2 } else { print 0 } } EOF Используем: awk -f test - ну и вводим наше число и получаем результат Пример for awk 'BEGIN{ for (i=1; i<11; i++){print i}}' awk 'BEGIN{ for (i=1; i<11; i++){if(i==5) break; print i}}' awk 'BEGIN{ i=10 ; while (i>0){ print i; i-- }}' |