You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
5.3 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Задания на обработку данных в bash
## 1
Вызовите `"for f in `seq 20`; do echo $RANDOM >> rnds; done"` и отсортируйте данные `rnds`, в алфавитном порядке, по возрастанию чисел.
```
sort rnds
sort -n rnds
```
## 2
Сохраните эти первые 10 записей датасета titanic в файл `titanic.csv` для последующих заданий:
```
PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C
3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S
4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S
5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S
6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q
7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S
8,0,3,"Palsson, Master. Gosta Leonard",male,2,3,1,349909,21.075,,S
9,1,3,"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)",female,27,0,2,347742,11.1333,,S
10,1,2,"Nasser, Mrs. Nicholas (Adele Achem)",female,14,1,0,237736,30.0708,,C
```
## 3
Выведите первую колонку, используя `awk`.
```
awk -F, '{print $1}' file.csv
```
## 4
Выведите содержимое файла без заголовка.
```
tail -n +2 file.csv
```
## 5
Выведите первую и третью колонку файла, используя `awk`.
```
awk -F, '{print $1 "," $3}' file.csv
```
## 6
Выведите только те строки, которые содержат строку `male` или `female`:
```
grep "female" file.csv
```
## 7
Отсортируйте значения `titanic.csv` по значению `Ticket` (9 колонка):
```
sort -t, -k2 file.csv
```
## 8
Уберите дублирующиеся строки на основании третьей колонки, используя `awk`.
```
awk -F, '!seen[$1]++' file.csv
```
## 9
Посчитайте сумму колонки `Fare`, используя `awk`.
```
awk -F, '{sum+=$3} END {print sum}' file.csv
```
## 10
Сконвертируйте файл из csv в json формат, используя `jq`.
```
jq -R -r 'split(",") | {name:.[0],age:.[1]}' file.csv
```
## 11
Используя `awk` сконвертируйте строки со значениями из колонок `PassengerId`, `Survived`, `Pclass` файла в набор `SQL INSERT` утверждений, которые можно использовать для импорта в SQL базу данных. Используйте `awk`.
```
awk -F, '{printf "INSERT INTO table VALUES (\"%s\", \"%s\", \"%s\");\n", $1, $2, $3}' file.csv
```
## 12
Конвейеры Unix позволяли организовывать сложные преобразования данных ещё до фреймворков обработки больших данных и сейчас иногда могут быть даже быстрее [Adam D. Command-line Tools can be 235x Faster than your Hadoop Cluster].
Найдите гистограмму слов по методу mapreduce с помощью утилит и операторов конвейера. Гистограмма должна быть отсортирована по частоте встречи слова в тексте.
MapReduce выполняет следующие действия в первой фазе: разбивает содержимое файла на слова, сортирует их, каждому слову сопоставляет 1. Во второй фазе складывает единицы каждого слова, что даёт конечный результат. Используйте любой набор утилит и конструкций bash. Одно из решений задействует: `uniq`, `sort`, `cat`, `sed`.
```
cat /var/log/dpkg.log | sed 's/ /\n/g' | sort -k1 | uniq -c | sort -k1 -n
```
## 13
Повысьте права до пользователя root с помощью команды `su - root`. Найдите в системном логе `/var/log/auth.log` события "authentication failure", оставьте в строке только дату и имя пользователя и сохраните их в файл. Следуя правилам хорошего тона, после выполнения операций не забудьте выйти из аккаунта суперпользователя.
```
cat /var/log/auth.log | grep 'authentication failure' | sed 's/^\(.\{15\}\).*authentication failure; logname=\(\w\+\) .*/\1 \2/g'
```
## 14
Выведите 10 самых больших открытых файлов в системе, используя `lsof` и `awk`.
```
lsof / | awk '{ if($7 > 1048576) print $7/1048576 "MB" " " $9 " " $1 }' | sort -n -u | tail
```
# Man страницы
```
man awk
man lsof
man sort
man uniq
man cat
man sed
man jq
man su
```
# Ссылки
[Adam D. Command-line Tools can be 235x Faster than your Hadoop Cluster] https://adamdrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html