#linux #bash #awk
#linux #bash #awk
Вопрос:
echo “Enter Number:”
read n1
awk '/^$/ {ca=""; cp=""} /^#/ {ca=ca " " $0} /^$n1/ amp;amp; ca {cp=ca; ca=""} /^$n1/ {print $0 " " cp}’ FILENAME
после ввода числа я должен получить вывод по заданному вводу.
Введите число: 1
Вывод
1 тестовый счастливый захват 1234 980
Пожалуйста, предложите мне приведенный выше сценарий
Комментарии:
1. Я думаю, вам, вероятно, следует посмотреть, как использовать awk, прежде чем писать в нем что-то
2. после запуска скрипта система должна запросить ввести номер, после ввода номера скрипт будет выполнен на основе заданного номера.
3. Как выглядят ваши входные данные? Как номер ввода соответствует данным в файле?
4. входные данные будут выглядеть следующим образом 1.1.1 роберт 80 48 67 87 89 1.1.2 ренолд 80 49 87 98 90 1.1.3 грейси 100 100 87 78 78 1.1.4 пол 25 45 33 20 19 1.1.1 роберт 80 48 67 87 89 1.1.2 ренолд 80 49 87 98 90 1.1.3 грейси 100 100 87 78 78 1.1.4 пол 25 45 3320 19 Число (1.1.1 или 1.1.2 … и т.д.) присутствует в файле несколько раз, я должен проанализировать файл и извлечь файл на основе числа. Это файл размером 1 ГБ
Ответ №1:
Вам нужно передать переменные оболочки с -v
опцией awk:
awk -v patt="^$n1" '
/^$/ {ca=""; cp=""}
/^#/ {ca=ca " " $0}
$0 ~ patt amp;amp; ca {cp=ca; ca=""}
$0 ~ patt {print $0 " " cp}
’ FILENAME
Комментарии:
1. Это может быть более понятным, в смысле разделения проблем, если переменная, переданная awk, была
n1
вместоpatt
, а затем использовалось"^"n1
. (При этом я признаю, что это более запутанно для чтения в самом awk, поскольку это, скорее всего, будет выглядеть как синтаксическая ошибка, поэтому кто-то не знаком с awk.)