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
ツールです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.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
非常に簡単な答えは次のとおりです。
$猫テストテキスト 1. 機敏な茶色キツネが怠惰な犬を飛び越えました。 $ catテストテキスト| tr ' ' '\n'ソート>テストテキスト2 $猫-n testText testText2 1 1. 機敏な茶色のキツネが怠惰な犬を飛び越えました。 20日。 3ブラウン 4匹。 キツネ5匹 6番ジャンプ 7怠惰 8時以上 9 早く 10個 11