
Я хочу добавить file2
к file1
. Перед тем, как я это сделаю, мне нужно добавить настроенный номер строки к file2
.
file1
1 abc
2 bcd
3 efg
file2
mkh
dfd
aad
Добавьте номер строки в
file2
следующийfile1
.4 mkh 5 dfd 6 aad
Добавить
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
выведет количество строк, за которым следует имя файла, но поскольку мы перенаправили wc
stdin для , чтобы получить из 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