извлечение от строки до строки и затем сохраняет для разделения файла

К сожалению, разработчики Gnome твердо держат мнение, что пользователи никогда не смотрят на поток сообщений об ошибках приложений GUI (он скрыт в некотором файле журнала где-нибудь или возможно непосредственно зажат в битоприемник). Они, кажется, никогда не смотрят на ошибки, даже когда они работают над своими программами. Таким образом, Вы заканчиваете с убиванием “GTK-КРИТИЧЕСКИХ”, “GOBJECT-КРИТИЧЕСКИХ”, “Бойко-критических”, и т.д. “КРИТИЧЕСКИЕ” сообщения из приложений Gnome (и до меньшей степени из приложений KDE) средний “программист были небрежны, но эй, это, кажется, работает, поэтому кто заботится”.

Между прочим, GSM является Менеджер сеансов Gnome. Ничто, чтобы сделать с сотовыми сетями.

7
21.08.2018, 02:12
3 ответа

Каким бы ни был пользователь, необходимо учитывать любые политики по сложности пароля. Если доступ осуществляется только через SSH и PasswordAuthentication имеет значение no в sshd _ config , то значение пароля не имеет. Также обратите внимание, что записи в shadow являются зашифрованными паролями, поэтому значения ! и * являются не паролями - а строками, которые не являются допустимыми зашифрованными значениями, что предотвращает вход в систему на основе пароля.

-121--119382-

Да. Ну, я сделал быстрый тест в своей системе, монтируя NTFS-раздел из Windows в каталог в XFS Linux-разделе, и это сработало нормально.

Вы должны выполнить эту операцию как root.

-121--161469-
sed -n '2762818,2853648p' /var/log/logfile > /var/log/output.txt

p предназначен для печати

9
27.01.2020, 20:16

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

head -n{to_line_number} logfile | tail -n+{from_line_number} > newfile

Замените from_line_number и to_line_number , которые вы хотите.

Тестирование

cat logfile
This is first line.
second
Third
fourth
fifth
sixth
seventh
eighth
ninth
tenth

##I use the command as below. I extract from 4th line to 10th line. 

head -n10 logfile | tail -n+4 > newfile
fourth
fifth
sixth
seventh
eighth
ninth
tenth
0
27.01.2020, 20:16

Простое решение здесь использовать некоторый вид межпроцессной связи, чтобы указать целевой процесс, чтобы сделать изменение. Например, можно использовать сигналы:

#!/bin/sh

export x=true
start() {
trap x=false USR1
while [ $x = "true" ]; do
    echo running...
    sleep 1
done
}

start &
sleep 5
kill -USR1 $!
wait

выдает этот вывод:

$ ./testit.sh
running...
running...
running...
running...
running...
$
-121--133800-

Возможно, лучший способ сделать это с перенаправлением оболочки, как другие упомянули. sed хотя, будучи личным фаворитом, вероятно, не собирается делать это более эффективно, чем head - который предназначен для захвата только так много строк из файла.

Есть и другие ответы на этом сайте, которые наглядно показывают, что для больших файлов head -n [num] | tail -n [num] будет превосходить sed каждый раз, но, вероятно, даже быстрее, чем это, чтобы вообще отказаться от трубы.

Я создал файл, как:

echo | dd cbs=5000000 conv=block | tr \  \\n >/tmp/5mil_lines

И я пробежал его:

{ head -n "$((ignore=2762817))" >&2
  head -n "$((2853648-ignore))" 
} </tmp/5mil_lines 2>/dev/null  |
sed -n '1p;$p'                

Я использовал sed только там, чтобы захватить только первую и последнюю строку, чтобы показать вам...

2762818
2853648

Это работает потому, что при группировании команд с {...;} и перенаправлении входных данных для группы, например ...;} < input , все они будут использовать один и тот же входной сигнал. Большинство команд исчерпывают весь инфиль, считывая его так в {cmd1; cmd2;} < infile case обычно cmd1 считывает из заголовка инфиля в его конец, и cmd2 не остается ни одного.

глава , однако, всегда будет искать только до сих пор через свою инфиль, как ему поручено сделать, и так в...

{ head -n [num] >/dev/null
  head -n [num]
} <infile 

... случай, когда первый стремится через [num] и сбрасывает свой выходной сигнал в /dev/null , а второй оставляется для начала чтения с первого выхода.

Вы можете сделать...

{ head -n "$((ignore=2762817))" >/dev/null
  head -n "$((2853648-ignore))" >/path/to/outfile
} <infile

Эта конструкция также работает с другими видами составных команд. Например:

set "$((n=2762817))" "$((2853648-n))"
for n do head "-n$n" >&"$#"; shift
done <5mil_lines 2>/dev/null | 
sed -n '1p;$p'

... который печатает...

2762818
2853648

Но это также может работать как:

d=$(((  n=$(wc -l </tmp/5mil_lines))/43 ))      &&
until   [ "$(((n-=d)>=(!(s=143-n/d))))" -eq 0 ] &&
        head "-n$d" >>"/tmp/${s#1}.split"
do      head "-n$d" > "/tmp/${s#1}.split"       || ! break
done    </tmp/5mil_lines

Над оболочкой первоначально устанавливает $ n и $ d переменные в...

  • $ n
    • Число строк, указанное в wc для моего тестового файла /tmp/5mil _ lines
  • $ d
    • Частное от $ n/43 , где 43 является только некоторым произвольно выбранным делителем.

Затем выполняется цикл до тех пор, пока не уменьшится $ n на $ d до значения меньше $ d . При этом он сохраняет свой счетчик разделения в $ s и использует это значение в цикле для приращения именованного > выходного файла с именем /tmp/[ num] .split . В результате он считывает равное количество полей с разделителями \n ewline в своем инфиле в новый файл комплекта для каждой итерации, разделяя его поровну 43 раза в течение цикла. Он управляет им без необходимости считывать его инфайл более 2 раз - первый раз это когда wc делает это, чтобы считать его строки, и для остальной операции он считывает только столько строк, сколько он записывает в снаряжение каждый раз.

После запуска я проверил свои результаты, как...

tail -n1 /tmp/*split | grep .

ВЫВОД:

==> /tmp/01.split <==
116279  
==> /tmp/02.split <==
232558  
==> /tmp/03.split <==
348837  
==> /tmp/04.split <==
465116  
==> /tmp/05.split <==
581395  
==> /tmp/06.split <==
697674  
==> /tmp/07.split <==
813953  
==> /tmp/08.split <==
930232  
==> /tmp/09.split <==
1046511 
==> /tmp/10.split <==
1162790 
==> /tmp/11.split <==
1279069 
==> /tmp/12.split <==
1395348 
==> /tmp/13.split <==
1511627 
==> /tmp/14.split <==
1627906 
==> /tmp/15.split <==
1744185 
==> /tmp/16.split <==
1860464 
==> /tmp/17.split <==
1976743 
==> /tmp/18.split <==
2093022 
==> /tmp/19.split <==
2209301 
==> /tmp/20.split <==
2325580 
==> /tmp/21.split <==
2441859 
==> /tmp/22.split <==
2558138 
==> /tmp/23.split <==
2674417 
==> /tmp/24.split <==
2790696 
==> /tmp/25.split <==
2906975 
==> /tmp/26.split <==
3023254 
==> /tmp/27.split <==
3139533 
==> /tmp/28.split <==
3255812 
==> /tmp/29.split <==
3372091 
==> /tmp/30.split <==
3488370 
==> /tmp/31.split <==
3604649 
==> /tmp/32.split <==
3720928 
==> /tmp/33.split <==
3837207 
==> /tmp/34.split <==
3953486 
==> /tmp/35.split <==
4069765 
==> /tmp/36.split <==
4186044 
==> /tmp/37.split <==
4302323 
==> /tmp/38.split <==
4418602 
==> /tmp/39.split <==
4534881 
==> /tmp/40.split <==
4651160 
==> /tmp/41.split <==
4767439 
==> /tmp/42.split <==
4883718 
==> /tmp/43.split <==
5000000 
2
27.01.2020, 20:16

Теги

Похожие вопросы