从文本文件复制上一行到当前行

从文本文件复制上一行到当前行

我有一个包含行的文件,就像这样:

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;

相关内容