Shell 按行读取文件,并进行字符串切割

29 篇文章 0 订阅

Shell 按行读取文件,并进行字符串切割

设置分隔符,通过 IFS 切割变量

  • Shell 的环境变量分为 set, env 两种,其中 set 变量可以通过 export 工具导入到 env 变量中。其中,set 是显示设置shell变量,仅在本 shell 中有效;env 是显示设置用户环境变量 ,仅在当前会话中有效。换句话说,set 变量里包含了 env 变量,但 set 变量不一定都是 env 变量。这两种变量不同之处在于变量的作用域不同。显然,env 变量的作用域要大些,它可以在 subshell 中使用。
  • 而 IFS 是一种 set 变量,当 shell 处理"命令替换"和"参数替换"时,shell 根据 IFS 的值,默认是 space, tab, newline 来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量。

txt_comma_division.sh

#/bin/bash

#获取当前目录所在路径
workpath=`pwd`

#清空out_file.txt文件
cat /dev/null > $workpath/out_file.txt
cat /dev/null > $workpath/out_file_tmp.txt

#备份初始分隔符
OLD_IFS="$IFS"

#设置分隔符
IFS=","

#按行读取 in_file.txt 文件
while read line
do
	#将读取的一行 按分隔符 分割为数组
	array=($line)
	
	#将数组第三位元素写入到临时文件
	echo ${array[2]} >> $workpath/out_file_tmp.txt
	
done < $workpath/in_file.txt

#将临时文件排序,写入到输出文件
sort $workpath/out_file_tmp.txt >> $workpath/out_file.txt

#恢复初始分隔符
IFS="$OLD_IFS"

echo "輸入文件行数"
wc -l $workpath/in_file.txt

echo "輸出文件行数"
wc -l $workpath/out_file.txt

in_file.txt

12345,(12345),23.15.15:551,abcde
12345,(12345),23.15.15:555,abcde
12345,(12345),23.15.15:553,abcde
12345,(12345),23.15.15:554,abcde
12345,(12345),23.15.15:552,abcde

out_file.txt

23.15.15:551
23.15.15:552
23.15.15:553
23.15.15:554
23.15.15:555

out_file_tmp.txt

23.15.15:551
23.15.15:555
23.15.15:553
23.15.15:554
23.15.15:552

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小泉映月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值