我有一个像
这样的文本文件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
答案 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