Как увеличить счетчик строки для замены начала строки с помощью AWK /…?

Обратите внимание, что по умолчанию в Ubuntu НЕ регистрируются входы ssh в файл / var / log / auth . Это уровень ведения журнала INFO .

Если вы хотите, чтобы он включал попытки входа в систему в файл журнала, вам необходимо отредактировать файл / etc / ssh / sshd_config (как root или с помощью sudo) и изменить LogLevel с INFO на VERBOSE .

После этого перезапустите демон sshd с помощью

sudo service rsyslog restart

. После этого попытки входа в систему ssh будут регистрироваться в файле /var/log/auth.log .

9
30.12.2016, 14:57
4 ответа

nl - это утилита для нумерации строк файла. Использование:

nl /path/to/file

В вашем конкретном случае:

$ nl  -s ' & ' input.txt                                                                                                 
     1 & What & South Dragon & North Dragon    & 5 \\ \hline
     2 & What & South Dragon & North Dragon    & 5 \\ \hline
     3 & What & South Dragon & North Dragon    & 5 \\ \hline
11
27.01.2020, 20:04

Python может быть хорошим альтернативным инструментом для этого:

$ python -c "import sys;lines=[str(i)+' & '+l for i,l in enumerate(sys.stdin,1)]; print ''.join(lines)" < input.txt      
1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

Это работает так, что мы перенаправляем текст в stdin Python и читаем строки оттуда. Функция enumerate () - это то, что дает количество строк, при этом sys.stdin указан в качестве входных данных, а 1 является начальным индексом. Остальное просто - мы составляем список новых строк, преобразовывая index как строку, соединенную вместе со строкой '&' , и самой строкой. Наконец, все, что собрано из списка, в один тест с помощью функции ''. Join () .

В качестве альтернативы, вот многострочная версия файла сценария или просто для удобства чтения:

#!/usr/bin/env python
import sys

for index,line in enumerate(sys.stdin,1):
    print str(index) + ' & ' + line.strip()

Работает точно так же:

$ ./line_counter.py  < input.txt                                                                                         
1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

Но если вы предпочитаете делать это в bash, то это тоже можно сделать:

$ counter=1; while read line ; do printf "%s & %s\n" "$counter" "$line" ; counter=$(($counter+1)) ; done < input.txt
1 & What & South Dragon & North Dragon    & 5 \ hline
2 & What & South Dragon & North Dragon    & 5 \ hline
3 & What & South Dragon & North Dragon    & 5 \ hline
3
27.01.2020, 20:04

Это также вариант, использующий cat -n с автоматической нумерацией:

while read num line;do echo $num "&" $line;done <<<$(cat -n a.txt)
2
27.01.2020, 20:04

Это достигает того, к чему вы ищете. (как и awk '$0=NR" и "$0' имя файла, но это немного загадочно)

awk '{print NR,"&",$0}' filename
1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

Или если sed предпочтительнее, это дает тот же результат.

sed = filename | sed 'N;s/\n/ \& /'

perl подходы.

perl -pe '$_="$. & $_"' filename
perl -pe 's/^/$. & /' filename
10
27.01.2020, 20:04

Теги

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