为了技术,我不会停下学习的脚步,我相信我还能走二十年。
分类:
2012-07-06 20:24:51
原文地址:交叉存储文件shell实现 作者:g_programming
交叉存储文件shell实现
题目:要求使用shell实现两个文本的交叉存储,即先存储第一个文本的第一行,然后是第二个文本的第一行,如此交替,分别实现两个文本行数相同和行数不同的情况。
解题思路:(1)利用exec为文件建立相应的文件描述符,通过文件描述符读写,利用while的特性
while read line1
do
done < $1
可以循环读取文件里面的内容。
(2)直接利用exec为文件建立相应的文件描述符,函数store3即是这种方法,为两个输入文件都建立了文件描述符来进行处理。
脚本清单:
#! /bin/bash
#定义函数
declare -f store1
declare -f store2
declare -f store3
#定义一个整型
declare -i flag
flag=0
function store1()
{
#以文件描述符5打开文件$2
exec 5<$2
#复制文件描述符5到文件描述符1
# exec 1<&5
while read line1
do
read line2 <&5
echo $line1 >> $3
echo $line2 >> $3
done < $1
}
function store2()
{
#以文件描述符5打开文件$2
exec 5<$2
#复制文件描述符5到文件描述符1
# exec 0<&5
while read line1
do
if [ $flag -eq "0" ]; then
read line2 <&5
fi
echo $line1 >> $3
if [ -n "$line2" ]; then
echo $line2 >> $3
else
flag=1
fi
done < $1
while read line2 <&5
do
echo $line2 >> $3
done
}
function store3()
{
exec 3<$1
exec 4<$2
while true
do
read line1 <&3
read line2 <&4
#测试的时候为啥必须要加上双引号
if [ -n "$line1" ]; then
echo $line1 >>$3
if [ -n "$line2" ]; then
echo $line2 >>$3
else
while read line1 <&3
do
echo $line1 >> $3
done
break
fi
else
if [ -n "$line2" ]; then
while read line2 <&4
do
echo $line2 >> $3
done
break
else
break
fi
fi
done
exec 3<&-
exec 4<&-
}
set -x
store3 "$@"