テキストファイルの前の行を現在の行にコピー

テキストファイルの前の行を現在の行にコピー

次の行を含むファイルがあります。

A
B
C

次の行のコピーとマージされた各行を含む重複ファイルをbashに作成したいと思います。たとえば、次のようになります。

A;B
B;C
C;

答え1

使用awk:

awk 'prev{ print prev ";" $0 }
     { prev = $0 }
     END { if (NR) print prev ";" }'

あなたの意見に基づいて与えられた

A;B
B;C
C;

答え2

Quick'n'dirty 方式 (ファイルを 2 回読み込む作業を含む):

$ tail -n+2 file | paste -d';' file -
A;B
B;C
C;

答え3

$ sed 'x;G;s_\n_;_;1d;${p;x;s_$_;_;}' file
A;B
B;C
C;

このsed式が行うことは次のとおりです。

  • x:着信行を予約済みスペースに保存し、前の行を検索します。
  • G:予約済みスペースの新しい行を前の行に追加します。
  • s_\n_;_:改行文字を;
  • 1d:最初の行の場合は削除し(印刷しない)、次の行に進みます。
  • ${...;}:これが最後の行なら...
  • p:まず接続ペアを印刷します。
  • x: 最後の行を検索
  • s_$_;_:最後に追加;

答え4

基本的なアイデアとTorinが提供するawkソリューション:

$ perl -lne 'print "$last;$_" if defined $last; $last=$_;END{print "$last;" if $.}' file 
A;B
B;C
C;

または全体的な単純さを好む場合:

$ perl -lne'$.>1?print"$l;$_":1;$l=$_}{print"$l;"if$.' file 
A;B
B;C
C;

関連情報