次の行を含むファイルがあります。
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;