一、实验要求
批处理
有两个文本如下,实际中并不知道两文本各有多少行:
文本1.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ccccccccccccccccccccccccccccccccccccccc
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
ggggggggggggggggggggggggggggggggggggggg
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
文本2.txt
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
要求用Windows下批处理和Linux下的shell脚本完成,两文本交替输出:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
ccccccccccccccccccccccccccccccccccccccc
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
ggggggggggggggggggggggggggggggggggggggg
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
要求:
1 尽量不生成临时文件
2 代码要高效,代码尽量简洁
3 给出各种情况的测试结果截图(正常文件,巨大文件,一个空文件,两个空文件)
二、实验过程
1、Windows下批处理,两文本交替输出
新建文件夹BAT,并在其中新建三个txt文件:
1.txt内容如下:
2.txt内容如下
2818.txt(代码内容)如下:
@echo off
set "paths=1.txt"
for %%a in ("%paths%") do (
if "%%~za" equ "0" (
echo "1.txt empty"
) else (
echo "1.txt not empty"
)
)
set "paths=2.txt"
for %%a in ("%paths%") do (
if "%%~za" equ "0" (
echo "2.txt empty"
pause
) else (
echo "2.txt not empty"
)
)
for /f "delims=" %%i in (1.txt) do set /a n+=1&call,set "_%%n%%=%%i"
for /f "delims=" %%i in (2.txt) do set /a m+=1&call,set ".%%m%%=%%i"
if %n% gtr %m% (set "num=%n%") else (set "num=%m%")
for /l %%i in (1,1,%num%) do (
if defined _%%i call,echo %%_%%i%%
if defined .%%i call,echo %%.%%i%%
)
pause>nul
然后将2818.txt的后缀改为bat,如下图所示:
然后双击bat文件,则成功运行,如下图所示:
2、Linux下的shell脚本完成,两文本交替输出
像上面的1一样创建1.txt与2.txt,然后“vim 20212818.sh”创建代码文件
(1)代码文件内容为(这种sh代码复制时遇到文件读空的情况会输出空行):
paste 1.txt 2.txt | tr "\t" "\n"
运行截图如下:
(2)20212818.sh代码文件内容为(以下代码在文件读空时不会输出空行):
#! /bin/bash
#
# 输出文件的某一行
# 参数1:文件名
# 参数2:输出行数
function printLine() {
pri=`cat $1 | head -n$2 | tail -1f`
#字符串长度是否为0,不为0输出
if [ -n "${pri}" ]
then
echo ${pri}
fi
}
file1=./1.txt
file2=./2.txt
# 得到两个文件的行数
m=`cat ./${file1} | wc -l`
echo "第一个文件行数为:${m}"
n=`cat ./${file2} | wc -l`
echo "第二个文件行数为:${n}"
# 比较两个文件行数大小,记录文件行数大的文件
max=
min=
moreTxt=
if [ ${m} -gt ${n} ]
then
max=${m}
min=${n}
moreTxt="${file1}"
else
max=${m}
min=${n}
moreTxt="${file2}"
fi
echo "行数小为:${min}"
echo "行数大为:${max}"
#输出文件相同行数
i=1
while (( i <= ${min} ))
do
printLine ${file1} ${i}
printLine ${file2} ${i}
let i++
done
#输出文件大的行数
while (( i <= ${max} ))
do
printLine ${moreTxt} ${i}
let i++
done
运行截图如下: