ファイルにカスタム行番号を追加する方法

ファイルにカスタム行番号を追加する方法

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ツールですN数字ファイルの行。この-vスイッチは行番号の開始値を提供します。私はサブシェルを使用してのwc行番号を取得し、file1ここに1を追加しての先頭行番号を取得し、file2結果を最後に連結しますfile1

これはwc -l file1行番号の後にファイル名を印刷しますが、wc標準入力をfromにリダイレクトしたため、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.txtnlawk

  • 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

非常に簡単な答えは次のとおりです。

$猫テストテキスト
1. 機敏な茶色キツネが怠惰な犬を飛び越えました。

$ catテストテキスト| tr ' ' '\n'ソート>テストテキスト2

$猫-n testText testText2
     1 1. 機敏な茶色のキツネが怠惰な犬を飛び越えました。
     20日。
     3ブラウン
     4匹。
     キツネ5匹
     6番ジャンプ
     7怠惰
     8時以上
     9 早く
    10個
    11

関連情報