我有一个包含行的文件,就像这样:
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 方式(涉及读取文件两次):
$ 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;