如何將自訂行號新增至檔案中

如何將自訂行號新增至檔案中

我想附加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 那個

相關內容