И вот Perl способ:
perl -F, -ane 'print if $#F==10'
-n
заставляет perl
считывать строку входного файла и выполнять сценарий, заданный -e
в каждой строке. -a
включает автоматическое разделение: каждая входная строка будет разделена на значение, заданное -F
(здесь запятая), и сохранена как массив @ F
.
$ # F
(или, в более общем случае, $ # массив
) является самым высоким индексом массива @ F
. Так как массивы начинаются с 0
, строка с 11 полями будет иметь значение @ F
от 10
. Поэтому сценарий печатает строку, если в ней ровно 11 полей.
Если сеанс остается активным, он остается активным. Там нет никаких трюков, просто буфер и TCP делает это дело.
Если соединение с ssh-сеансом потеряно, а затем восстановлено из-за "плохого" подключения к Интернету, приложение, запущенное в этом сеансе, никогда не знает. Сеанс продолжается.
Отключение монитора (при просмотре консоли) не должно влиять на приложение, запущенное на этой консоли.
-121--69302-Но повлияет ли отключение на содержимое файла? Я думал, это не так.
Если соединение прервано, сеанс завершается, и оболочка и команда прекращаются. Вы заинтересованы в выполнении команд на удаленном сервере, даже если вы отключаетесь, вы должны искать nohup
команду, экран
или tmux
мультиплексор или mosh
для плохих оболочек соединения.
Заменить пробелы запятыми, удалить слова перед двоеточием, удалить начальный пробел, удалить запятые перед пробелами:
sed 's/ /,/g; s/[^,]*:,/ /g;s/^ //;s/, / /g'
Выход:
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
Вы можете sed
сначала удалить шаблон, содержащий ent
, а затем удалить интервал и заменить его на ,
как
sed 's/ent[0-9][0-9]: //g; s/ /,/g'
Использование GNU awk
илиmawk
(для поддержки регулярных выражений вRS
):
$ mawk -v RS='ent[0-9][0-9]: ' -v ORS=' ' -v FS=' ' -v OFS=',' '
$1 != "" { $1=$1; print }
END { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
Или, что то же самое,
$ mawk 'BEGIN { RS="ent[0-9][0-9]: "; ORS=FS=" "; OFS="," }
$1 != "" { $1=$1; print }
END { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
Это обрабатывает одну строку как набор записей, разделенных entNN:
(, где N
— некоторая цифра ). Каждая запись читается как набор полей, разделенных пробелом -.
Тест $1 != ""
пропускает первую пустую запись (перед первым разделителем записей ничего нет )и соответствующий блок переформатирует запись для вывода, просто выполнив $1=$1
. Это заставит awk
переформатировать его, используя предоставленные значения ORS
и OFS
.