Как добавить пользовательские номера строк в файл

Как добавить пользовательские номера строк в файл

Я хочу добавить file2к file1. Перед тем, как я это сделаю, мне нужно добавить настроенный номер строки к file2.

file1

1 abc
2 bcd
3 efg

file2

mkh
dfd
aad
  1. Добавьте номер строки в file2следующий file1.

    4 mkh
    5 dfd    
    6 aad
    
  2. Добавить file2вfile1

    cat file2 >> file1
    

Как добавить номер строки в file2показанный выше код?

решение1

nl -v "$((1+$(wc -l < file1)))" file2 >> file1

nlэто инструмент длянумбралines файла. -vПереключатель предоставляет начальное значение номеров строк. Я использую подоболочку и wcдля получения количества строк file1, и добавляю к нему единицу, чтобы получить начальный номер строки для file2, и объединяю результаты в конце file1.

Обратите внимание, что это wc -l file1выведет количество строк, за которым следует имя файла, но поскольку мы перенаправили wcstdin для , чтобы получить из file1, wcсам инструмент ничего не знает об имени файла file1и просто выводит только количество строк (с некоторыми пробелами, которые в данном контексте не имеют значения).


Это можно сделатьнемногоболее чисто просто используя awkи nl:

nl -v $(awk 'END { print NR + 1 }' file1) file2 >> file1

решение2

С awk:

awk -v nl=$(wc -l <f1.txt) '{print NR+nl " " $0}' f2.txt
  • $(wc -l <f1.txt)получает количество строк в файле f1.txt, мы передаем это как nlпеременную вawk

  • print NR+nl " " $0печатает каждую запись f2.txtс соответствующим номером строки, добавленным к переменной nl, затем пробел, а затем всю запись

Пример:

% cat f1.txt 
1 abc
2 bcd
3 efg

% cat f2.txt 
mkh
dfd
aad

% awk -v nl=$(wc -l <f1.txt) '{print NR+nl " " $0}' f2.txt
4 mkh
5 dfd
6 aad

решение3

Другое awkрешение:

$ awk 'NF==1{print ++c" "$1 >> "file1"} NF>1{c=$1}' file1 file2
$ cat file1
1 abc
2 bcd
3 efg
4 mkh
5 dfd
6 aad


Общий случай:

$ cat file1
1 abc x
2 bcd y
3 efg z
$ cat file2
mkh 1a
dfd foo
aad bar

$ awk 'NR==FNR{c=$1; next} {print ++c" "$0 >> "file1"}' file1 file2
$ cat file1
1 abc x
2 bcd y
3 efg z
4 mkh 1a
5 dfd foo
6 aad bar

решение4

Очень простой ответ:

$ cat testText
1. Быстрая бурая лиса перепрыгнула через ленивую собаку.

$ cat testText | тр ' ' '\n' | сортировать >testText2

$ cat -n testText testText2
     1 1. Быстрая рыжая лиса перепрыгнула через ленивую собаку.
     2 1.
     3 коричневый
     4 собака.
     5 лиса
     6 прыгнул
     7 ленивый
     8 больше
     9 быстрых
    10
    11

Связанный контент