如何将自定义行号添加到文件中

如何将自定义行号添加到文件中

我想附加file2file1.在此之前,我需要将自定义行号添加到file2.

file1

1 abc
2 bcd
3 efg

file2

mkh
dfd
aad
  1. 将行号添加到file2以下file1.

    4 mkh
    5 dfd    
    6 aad
    
  2. 附加file2file1

    cat file2 >> file1
    

如何将行号添加到file2上面显示的内容中?

答案1

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

nl是一个工具n数字文件的行。该-v开关提供行号的起始值。我使用子 shellwc来获取 的行数file1,并向其添加 1 以获取 的起始行号file2,并将结果连接到 的末尾file1

请注意,这wc -l file1会打印行数,后跟文件名,但由于我们已将wc的 stdin 重定向到 from file1,因此该wc工具本身不知道有关文件名的任何信息file1,仅打印行数(带有一些不包含空格的空格)在这种情况下并不重要)。


这可以做到轻微地更干净地使用awkand 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 测试文本
1. 敏捷的棕色狐狸跳过了那只懒狗。

$ 猫测试文本 | tr ' ' '\n' |排序>测试文本2

$ cat -n testText testText2
     1 1. 敏捷的棕色狐狸跳过了那只懒狗。
     2 1.
     3 棕色
     4 狗。
     5 狐狸
     6 跳
     7 懒惰
     8 点以上
     9快
    10 的
    11 那个

相关内容