LINUX.ORG.RU

Сообщения rusya_rr

 

Разбор строки на элементы попарно

Добрый день! Есть строка вида

a,b,c,d,w,x,y,z
n - число элементов в строке
Нужно ее растащить (распечатать), лучше при помощи awk, попарно вот так

a,w
b,x
c,y
d,z

т.е.

k(1),k(n\2+1)
k(2),k(n\2+2)
...
k(n\2),k(n)


Подскажите пожалуйста, как мне это сделать. Спасибо.

 ,

rusya_rr ()

systemd service для multiple tcpdump

Доброго! Есть необходимость писать несколько дампов с разных хостов в разные файлы.

Решения для одного дампа есть - раз и два.

Можно наплодить таких файлов по числу дампов. Можно попробовать в ExecStart прописать множество tcpdump c & в конце (хз, сработает ли).

Есть ли более удобоваримое решение? Хотелось бы одним файлом описать весь запуск. А еще было бы неплохо описывать каждый дамп своей секцией в файле. Спасибо.

 ,

rusya_rr ()

Преобразование строки

Доброго! Выдумывал название для темы, но так и не смог придумать, как объяснить, чего хочу, в двух словах, так что прошу простить.

Есть строки вида

field1;bla,fde,ghjk,lmn

Хочу привести их к виду

filed1;bla
field1;fde
field1;ghjk
filed1;lmn

Такое надо сделать только со строками, где второе поле(при разделителе точка с запятой) содержит множество значений, разделенных запятыми. Хотелось бы на awk, но устроит любой вариант. Спасибо!

 

rusya_rr ()

Отбор строк с одинаковыми полями

Привет, доброго всем.

Есть файл вида

abc;ghjk;123;5
abc;vbnm;123;10
def;dfghhjk;456;4
def;vbnmvm;456;7
def;adsds;456;5
...
много других таких же строк

Нужно со строками, имеющими одинаковые определенные поля (здесь $1 и $3), делать что нибудь. Например узнать сумму значений их поля $4: Значения полей заранее неизвестны, требуется лишь отобрать строки с одинаковыми определенными полями

abc;123;15
def;456;16

Сейчас я это делаю, ставя одинаковые определенные поля рядом

abc;123;ghjk;5
abc;123;vbnm;10
def;456;dfghhjk;4
def;456;vbnmvm;7
def;456;adsds;5
...
много других таких же строк

, вырезая этот кусок в файл образцов

abc;123
def;456
...
много других таких же строк

и производя такую операцию:

cat файл_с_образцам|while read образец;do grep образец файл_с_полями_рядом|awk -F';' 'сделать что-нибудь с нужным полем' ;done

Я хочу прекратить это безумие. Наверняка можно тем же awk или sed отбирать строки по нужным полям, но я не осилил. Прошу помощи.

 ,

rusya_rr ()

Подсчет разницы во времени между строками лога.

Доброго!

Есть стандартный лог

2017-07-31 12:23:21.000
2017-07-31 12:27:21.000
2017-07-31 12:36:21.000
2017-07-31 12:39:21.000
2017-07-31 12:45:21.000

Нужно найти те строки, в которых разница вов времени по сравнению с предыдущей больше 5 секунд. В выводе нужна предыдущая строка и строка с разницей по отношению к ней больше 5 секунд.

Спасибо.

 

rusya_rr ()

Замена переносов по условию

Доброго. Есть чудесный заменятор переносов.

cat days.txt | sed ':a;N;$!ba;s/\n/ /g'
Не могу сообразить, куда воткнуть условие. Если следующая строка не начинается с числа с точкой с запятой, то в ней нужно менять перенос на пробел. Например:
111;part1
part2
part3
part4
222;part1
333;part1
переносы надо поменять только в строках
111;part1
part2
part3

ТО, должно получиться

111;part1 part2 part3 part4
222;part1
333;part1

Спасибо!

 

rusya_rr ()

grep в разные файлы за один проход

Доброго!

cat file.txt

foo whatewerfoo
bar whateverbar
xyz whateverxyz

Сейчас я делаю так:

for names in foo bar xyz;do
grep $names file.txt >$names.txt
done

что требует от меня проходов по файлу по числу образцов. Можно ли сделать это за один проход?

 ,

rusya_rr ()

awk regexp из файла

Доброго!

Я умею делать так:

awk -F";" ' $2 ~ /^foo|bar$/ {print $0}'
можно ли заставить awk читать регулярки из файла со списком регулярок по одной на строку?

inb4: про

paste -d"|" -s 
знаю.

Спасибо!

 ,

rusya_rr ()

Удалить строки с номерами, список которых в файле

Доброго! Подскажите пожалуйста. Есть файл с номерами строк, которые нужно удалить из другого файла. Номера рандомные. Просится sed, но что-то не выходит.

Нужно что-то вроде

sed -n '$(cat file1)d' file2

Спасибо.

 ,

rusya_rr ()

Как заменить поле в строке на результат выполнения команды над ним?

Что -то вроде

echo "148124520;foo;bar"|awk -F';' { print $(date -d @$1)";"$2";"$3 }'

Я могу порезать в цикле строки файла по полям, загнать их в переменные, совершить с ними что-то и распечатать. Есть ли менее порнографичный путь? Спасибо.

 , , ,

rusya_rr ()

Добавить паузу в цикл чтения

Доброго всем! Необходимо в скрипт

cat text.txt|while read line;do
some_function
done
после some_function воткнуть паузу

Стандартно это советуют делать

read -n 1 -r -p "Для следующей строки нажать Enter" keypress

Однако здесь read читает ввод из файла вместо ввода с консоли. Как еще можно сделать паузу при выполнении скрипта? Прошу помочь. Спасибо.

 , ,

rusya_rr ()

обработка содержимого буфера обмена командой read

Доброго!

Есть текст:

~ $ cat -A intext
This is string one$
This is string two$
This is string three$
$

Когда я пытаюсь вставить его из буфера обмена в ответ на первое приглашение скрипта,

~ $ cat ./1234
#!/bin/bash

echo "Текст1?"
read text1
echo "Текст2?"
read text2
echo text1=$text1
echo text2=$text2
то получается следующее:
~ $ ./1234
Текст1?
This is string one
This is string two
This is string three
Текст2?
text1=This is string one
text2=This is string two
~ $ This is string three
This: команда не найдена
, то есть все скрипт без вывода приглашений далее просто присваивает каждой следующей переменной новую строку из текста. Когда переменные кончаются, скрипт завершается и следующая строка воспринимается, как команда. Ожидалось, что содержимое буфера обмена присвоится только первой переменной. Как этого добиться? Спасибо.

 ,

rusya_rr ()

Посмотреть конец заархивированного файла

Доброго! Если посмотреть, что там в начале файла, я могу

zcat file.txt.gz|more 
, то как глянуть в конец - я в растерянности. Прошу помощи.

 

rusya_rr ()

подсчет символов в слове.

echo mail.ru|wc -m
8

Почему так? Спасибо.

 

rusya_rr ()

Удаление части строки по шаблону

Строка из csv:

abnm;ghjkghjk;342;hjkh;4324;34234;432;"hjhjk\`;''""'{)($!*."";567;рол;78

Между первой и последней кавычкой (") может быть произвольный текст, включающий что угодно. Только поле 8 с текстом обрамлено этими кавычками.

Нужно:

1. Вывести значение девятого поля (bash + grep, можно sed, но лучше не надо)

или

2. Вообще вырезать поле с текстом, приведя строку к виду:

abnm;ghjkghjk;342;hjkh;4324;34234;432;567;рол;78

Спасибо.

 , , ,

rusya_rr ()

Регулярное выражение grep для пары «key»:«value»

Пожалуйста, помогите написать regex.

Есть набор ключей и их значений, Ключи и значения разделены двоеточием, каждая пара разделена запятой. И ключ, и значение обрамлены кавычками. Не могу выдернуть одну пару.Например, нужно выдернуть значение ключа fghid.

Пример:

«abcd»:«ghjkghjkg»,«fghid»:«hjkhjkl1231312»,«gjhghj12»:«sdadhajkl»,«1231»:«sdad»

Спасибо.

 ,

rusya_rr ()

Выдернуть username из ssh_config

Доброго!

cat ~/.ssh/config
someoptions
Host host1
User username1
someoptions
Port 22
someoptions
HostName 1.1.1.1
someoptions

someoptions
someoptions
someoptions
Host host2
User username2
someoptions
someoptions
Port 22
HostName 2.2.2.2

Host host3
User username3
someoptions
someoptions
someoptions
Port 33
HostName 3.3.3.3
someoptions
someoptions

onemorehost

onemorehost

Как бы мне оттуда User для определенного HostName выдернуть? У меня что-то какая-то громоздкая многоступенчатая порнография получается, да и та не получается. Может, гуру помогут? P.S. хочется чистого shell без перла, седа и авк.

Спасибо.

 

rusya_rr ()

Группировка логических условий в bash

Добрый день.

true && status="pravda"|| false && status="nepravda";echo $status
Я предполагал, что status будет равен pravda, рассуждая, что все, что после ||, не выполнится. Однако значение status=nepravda. Почему? Если взять все, что после || в круглые скобки (), то работает, как надо, однако, как я понимаю это плодит новый шелл. В фигурных скобках {} такая конструкция работать отказывается.

Как сгруппировать список команд, которые нужно выполнить в случае неудачного выполнения первого списка команд? Пожалуйста, помогите.

P.S.

true && status="pravda"|| true && status="nepravda";echo $status
status=nepravda. Тоже.

Такое ощущение, что второй && реагирует как-то криво.

 

rusya_rr ()

обработка ввода оператором case

Добрый день. Необходимо обрабатывать $1 на предмет содержания нужного символа. Получается что-то вроде

if echo "$1"| grep -q a; then var="name1"; fi;
if echo "$1"| grep -q b; then var="name2"; fi;
..
if echo "$1"| grep -q c; then var="namen"; fi;



Чувствую, сюда просится case, но не могу сообразить. 

Спасибо.

 , ,

rusya_rr ()

Консольный MUA без локального MTA

Был неприятно удивлен, узнав, что для работы консольной утилиты mail необходим локальный MTA. Раньше об этом не задумывался.

Существует неоходимость отправлять сообщения скриптами через внешний SMTP с авторизацией.

Существуют ли консольные почтовые клиенты для linux, не требующие городить локальный mta? Или все же я неправильно читал и mail можно использовать сам по себе?

Про mutt, elm читал.

Спасибо.

 , ,

rusya_rr ()

RSS подписка на новые темы