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

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

file1

 1 abc 2 bcd 3 efg 

file2

 mkh dfd aad 
  1. Добавьте номер строки в file2 после file1 .

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

     cat file2 >> file1 

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

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

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

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


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

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

С 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 

Еще одно решение 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 

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

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

 $ cat testText |  tr '' '\ n' |  sort> testText2

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