【shell练习题】处理以.txt为结尾的文件,把文件内第一行删掉。 如果文件内第一行是空行则不去空行 然后把文件内剩下的所有的行,每两行两行进行替换 最后将txt后缀改成doc后缀

直接公布答案

for file in $(find ./data-do -name "*.txt")
do
		oneline=$(awk 'NR==1{print $0}' ${file})
        if [  -n "$oneline" ]
        then
                sed -i '1d' ${file}
                num=$(awk 'END{print NR}' ${file} )
                num=`expr $num / 2`
                for(( i=1;i<$num;i++ ))
                do
                        s=`expr $i + 1 `
                        j=`expr $s \* 2 `
                        d=`expr $j - 3 `
                        sed -i "$d{h;d};$j{G}" ${file}
                        sed -i "$d{h;d};$j{G}" ${file}
                done
        fi
done
echo `rename   's/\.txt/\.doc/' data-do/*  data-do/testdir/*

**

以下是代码分析过程

**
循环用find语句查找在当前目录下的data-do目录下以.txt结尾的文件名

for file in $(find ./data-do -name "*.txt")

设置变量oneline是文件内容为第一行的内容

oneline=$(awk 'NR==1{print $0}' ${file})

变量oneline是否为空值

if [  -n "$oneline" ]

删除文件里内容, ‘1d’为第一行。-i参数是直接操作文件里内容,不加则只是显示结果少第一行。

sed -i '1d' ${file}

将打印出来的文件内容行号最后一个作为变量num

num=$(awk 'END{print NR}' ${file} )

num除以2

num=`expr $num / 2`

循环文件每行内容,对每两行进行替换。

for(( i=1;i<$num;i++ ))
                do
                        s=`expr $i + 1 `
                        j=`expr $s \* 2 `
                        d=`expr $j - 3 `
                        sed -i "$d{h;d};$j{G}" ${file}
                        sed -i "$d{h;d};$j{G}" ${file}
                done

将第d行内容插入到第j行,d行内容为j行,j行内容变为j+1,所以行数都发生相应变化。

sed -i "$d{h;d};$j{G}" ${file}

例如第3行插入到第1行,再第4行插入到第2行

1		3		3		
2		1		4
3		2		1
4		4		2
5		5		5
6		6		6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值