
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
はツールですんアンバーlファイルの行番号を取得します。-v
スイッチは行番号の開始値を提供します。サブシェルとを使用してwc
の行数を取得しfile1
、それに 1 を加えて の開始行番号を取得しfile2
、その結果を の末尾に連結しますfile1
。
は行数wc -l file1
に続いてファイル名を出力しますが、wc
の標準入力を から取得するようにリダイレクトしているため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 テストテキスト 1. 素早い茶色のキツネが怠け者の犬を飛び越えました。 $ cat testText | tr ' ' '\n' | sort >testText2 $ cat -n テストテキスト テストテキスト2 1 1. 素早い茶色のキツネが怠け者の犬を飛び越えました。 2 1. 3 ブラウン 4匹の犬。 5キツネ 6人がジャンプ 7 怠け者 8オーバー 9 クイック 10の 11 の