读取1.5行的Bash脚本

时间:2014-09-12 07:26:11

标签: bash file-io

我有一个像

这样的文本文件
a
b
c
d
e
f

我想写一个bash脚本来读取文件并返回

ab
bc
cd
de
ef

到目前为止,我的尝试是一个脚本,它读取2行2行,并尝试保存第二个变量,以便在下一轮中重复使用它。但到目前为止我的尝试是:

#!/bin/bash

while read LINE
do let "COUNT++";
        if [[ $COUNT == 2 ]]; then
                echo $PREV $LINE
                COUNT=0
                LINE=$PREV2
        else
                PREV="$LINE"
        fi
done

我能管理的最好的是像

这样的列表
ab
cd
de
f

5 个答案:

答案 0 :(得分:7)

您可以使用:

p=
q=
while read -r p; do
   [[ -n "$q" ]] && echo "$q$p"
   q="$p"
done < file
ab
bc
cd
de
ef

答案 1 :(得分:3)

你真的不需要Bash脚本来做到这一点

$ cat t.txt
a
b
c
d
e
f
$ paste -d '' <(head -n -1 t.txt) <(tail  -n +2 t.txt)
ab
bc
cd
de
ef

如果您因为培训目的而确实需要脚本,请参阅@ anubhava的回答。您的第LINE=$PREV2行无效,因为$PREV2可能是拼写错误,分配给LINE的值将在循环开始时被覆盖。

答案 2 :(得分:2)

你也可以使用perl

perl -nle '$f && print $f.$_; $f=$_'

打印

ab
bc
cd
de
ef

答案 3 :(得分:1)

您可以使用此awk

执行此操作
awk 'f{print f $1}{f=$1}' file

答案 4 :(得分:0)

这个awk单行怎么样:

awk '{a[NR]=$0}END{for(i=1;i+1<=NR;i++)print a[i]a[i+1]}' file   

输出:

ab
bc
cd
de
ef