Как добавить номера строк в каждую строку, используя команду оболочки?


21

Мой файл,

PSS-A  (Primary A)
PSS-B  (Primary B)
PSS-C  (Primary C)
PSS-D  (Primary D)
PSS-E  (Primary E)
PSS-F  (Primary F)
PSS-G  (Primary G)
PSS-H  (Primary H)
PSS-I  (Primary I)
SPARE  (SPARE)

Выходной файл,

 1> PSS-A  (Primary A)
 2> PSS-B  (Primary B)
 3> PSS-C  (Primary C)
 4> PSS-D  (Primary D)
 5> PSS-E  (Primary E)
 6> PSS-F  (Primary F)
 7> PSS-G  (Primary G)
 8> PSS-H  (Primary H)
 9> PSS-I  (Primary I)
10> SPARE  (SPARE)

Ответы:


32

Если вы хотите тот же формат, который вы указали

awk '{print NR  "> " $s}' inputfile > outputfile

в противном случае, хотя это и не стандартно, большинство реализаций catкоманды могут печатать номера строк для вас (числа, дополненные до ширины 6 и сопровождаемые TAB, по крайней мере, в реализациях GNU, busybox, Solaris и FreeBSD).

cat -n inputfile > outputfile

Или вы можете использовать grep -n(цифры следуют :) с регулярным выражением, ^которое соответствует любой строке:

grep -n '^' inputfile > outputfile

Да ... обе команды работают .... но в catкоманде выводятся номера строк ... но не совсем то, что я хотел .... но awk '{print NR "> " $s}' inputfile > outputfileвыдает желаемый результат .... :-) @amit kumar
pmaipmui

1
Обратите внимание, что cat -nэто не портативно. Только -uопция указана в POSIXcat .
Vinc17

35

Правильный инструмент для этой работы nl:

nl -w2 -s'> ' file

Вы можете настроить wопцию idth в соответствии с общим количеством строк в файле (если вы хотите, чтобы числа были правильно выровнены).

Вывод:

 1> PSS-A  (Primary A)
 2> PSS-B  (Primary B)
 3> PSS-C  (Primary C)
 4> PSS-D  (Primary D)
 5> PSS-E  (Primary E)
 6> PSS-F  (Primary F)
 7> PSS-G  (Primary G)
 8> PSS-H  (Primary H)
 9> PSS-I  (Primary I)
10> SPARE  (SPARE)

3
nlспециально обрабатывает строки, содержащие последовательность из 1, 2 или 3 \:строк. Используйте, -d $'\n'чтобы избежать этого. Также по умолчанию он не нумерует пустые строки. Используйте -baдля нумерации каждой строки.
Стефан Шазелас

@ StéphaneChazelas действительно, большое спасибо! Обратите внимание, что $'...'синтаксис зависит от bash.
Myrdd

Мое сердце упало, когда я увидел, что seqне сделал этого. Слава Богу заnl
Шридхар Сарнобат

1
@myrdd, взято $'...'из ksh93 и также поддерживается zsh, mkshпо крайней мере, busybox sh, sh FreeBSD и bash. Это еще не стандарт, но планируется включить в следующую основную версию POSIX.
Стефан

@ StéphaneChazelas спасибо. для справки: есть вопрос о $'...'переносимости ( цитирование
myrdd

0

я сделал по методу ниже

команда: cat -n filename |sed -r "s/^\s+//g"| sed "s/^[0-9]*/&\> /g"

вывод

cat -n u.txt |sed -r "s/^\s+//g"| sed "s/^[0-9]*/&\> /g"
1>  PSS-A  (Primary A)
2>  PSS-B  (Primary B)
3>  PSS-C  (Primary C)
4>  PSS-D  (Primary D)
5>  PSS-E  (Primary E)
6>  PSS-F  (Primary F)
7>  PSS-G  (Primary G)
8>  PSS-H  (Primary H)
9>  PSS-I  (Primary I)
10>     SPARE  (SPARE)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.