テキストファイルを拡張する方法:
元のテキストファイル:
1
2
3
4
5
etc
希望の拡張結果:
1
2
3
4
5
2
3
4
5
6
3
4
5
6
7
etc.
つまり、ファイル 1 の最初の 5 行を新しい拡張ファイル 2 にリストし、n+1 から始めて 5 の 2 番目のブロックを追加し、n+2 で始まる 3 番目のブロックを追加するようにファイル 1 の最後まで続けますします。
ベストアンサー1
この行を一度だけ実行してください。
awk 'NR>5{printf"%s",out;sub("^[^\n]+\n","",out)}{out=out$0"\n"}END{printf "%s",out}' file
もちろん
file
ファイル名に変更してください。awk
入力を1行ずつ処理し、それに対して「動作」するプログラムです。out=out$0\n
変数を作成し、out
現在の行を変数に追加してから改行文字を追加します。NR>5{...}
これは、行5より大きいレコード(行など)に対して中括弧内の操作を実行します。printf "%s", out
変数を印刷しますout
。sub("^[^\n]+\n","",out)
out
ここでは、最初の改行文字の先頭まで空の文字列に置き換える削除コマンドとして使用される代替コマンドです。出力を2番目のファイルに保存するには、行の
file2
最後に ""> file2"を追加します。
修正する:
別のツールがありますsed
。ストリームエディタ、これはより短いですが、より秘密のソリューションを提供します。
sed -n '6,${x;p;s/^[^\n]\+\n//;x};H;1h;${x;p}' file
1h
「予約済み」スペースに最初の行を配置します。H
予約済みスペースに行を追加します。6,${x;p;s/^[^\n]\+\n//;x}
、6行目から始めて、予約済みスペースを現在の行と置き換えて印刷し、最初の行を削除して結果を再予約済みスペースに送信します。${x;p} は、処理の終わりに予約されたスペース (おそらく an
g
ではなく ax
) を再インポートして印刷します。