linux读取某个文件夹下所有txt文件,同时截取文件名的某一段字符串,添加到csv中的第一列,合成一个csv,增加第一行表头,同时备份txt文件


目标

linux读取某个文件夹下所有txt文件,同时截取文件名的某一段字符串,添加到csv中的第一列,合成一个csv,增加第一行表头,同时备份txt文件
这是我之前写的一个脚本,下面来分析一下


一、直接上代码含代码说明

#!/bin/bash
path_pwd=$(cd "$(dirname "$0")";pwd)
path=$1
files=$(ls $path/*txt)
for filename in $files
do
 name_data=$(basename $filename .txt)
 WLTID=${name_data#*_}
 #echo $filename
 while read line
 do
  xx=$WLTID','$line
  file_csv=${filename%/*}
  echo $xx >> "${file_csv}/filename.csv"
 done < $filename
done
sed -i '1i\WLTID,MOBILE,IDCARD,uStatus' "${path}/filename.csv"
mv $files "${path_pwd}/data_bak/"
  • 首先,第一步我我拿到了该路径的pwd,这里我其实要讲一下的就是,其实我原本不是这么写的,我直接调的pwd函数,在手动执行的时候,可以拿到该目录的路径,但是当我用调度任务的时候,却只有/root 这样的一个路径,所以对这个地方进行了修改,进入到这个目录下再进行pwd
  • $1接收一个数据
  • /*txt,表示只要以txt结尾的文件
  • 循环文件
  • name_data=$(basename $filename .txt) 截取文件名字比如/root/dteccc_001.txt —》dteccc_001
  • WLTID=${name_data#*_} 这个地方我也是查了一下,意思是以下划线_作为分割只取后面的一部分也就是001,当然也可以取前面的一部分,使用 #—>%
  • while一下 逐行读取,方便拼接
  • xx=$WLTID’,’$line 这个地方就是进行拼接了,中间以逗号分隔,shell的拼接方法有点类似python
  • file_csv=${filename%/*} 这个地方就是取前面的
  • echo $xx >> “${file_csv}/filename.csv” 这个地方就是追加了
  • done < $filename 传入文件
  • sed -i ‘1i’ 这个地方表示在第一行增加
  • mv $files “${path_pwd}/data_bak/” 这个地方就是移动到备份的目录下,保持该目录下的文件一直是最新的数据

二、没啥好说的说点其他的

  • shell脚本就是多测,不会就测一测,看看具体情况
  • 注意空格,注意空格,注意空格,重要的事情说3遍,shell相对于其他的语言来说,语法相对比较严格的。
  • 好了,没啥了,撒悠啦啦。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值