Linux课后作业,用Windows下批处理和Linux下的shell脚本完成,两文本交替输出

一、实验要求

批处理
有两个文本如下,实际中并不知道两文本各有多少行:

文本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

 

 

运行截图如下:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值