ファイルにカスタマイズされた行番号を追加する方法

ファイルにカスタマイズされた行番号を追加する方法

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はツールですアンバーlファイルの行番号を取得します。-vスイッチは行番号の開始値を提供します。サブシェルとを使用してwcの行数を取得しfile1、それに 1 を加えて の開始行番号を取得しfile2、その結果を の末尾に連結しますfile1

は行数wc -l file1に続いてファイル名を出力しますが、wcの標準入力を から取得するようにリダイレクトしているためfile1wcツール自体は のファイル名について何も知らず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として渡しますnlawk

  • 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. 素早い茶色のキツネが怠け者の犬を飛び越えました。

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

$ cat -n テストテキスト テストテキスト2
     1 1. 素早い茶色のキツネが怠け者の犬を飛び越えました。
     2 1.
     3 ブラウン
     4匹の犬。
     5キツネ
     6人がジャンプ
     7 怠け者
     8オーバー
     9 クイック
    10の
    11 の

関連情報