【shell】shell遍历文件,拼接内容(while循环)

相信程序员对于linux应该是挺熟悉的,对于基本命令也ok,但是可能有一部分人,其实对于shell的语法,总是不太熟悉(运维除外),比如我这个菜鸡,每次写shell(因为不经常写),都要先百度一波,才能写出来(写完又容易忘)。

所以该篇文章稍微记录下,这次写的内容。

背景:

就是我要往我的spark任务里面传入参数,这个参数是用户在运行的时候,指定的一个文本,里面是一些url(管他是什么呢,反正就是要我传进去),大概像这样!

当然,假设所有的url都是可用的(如果会传入有误的url,那就还要在shell里面加判断,也是不难的),不过要考虑到用户传入的文本可能会有些空行,不想把空行传进代码中。

正文:

shell如下:

#!/bin/sh
# 使用while循环读取$1文本
while read -r line
do
 #判断是否是第一次读,是否读取到的数据是空行
 if [ -z $x ] && [ -n $line ] ; then
  x=$x"'"$line"'"
 #判断是否读取到该行不为空,不为空就拼接到x中
 elif [ ! -z $line ] ; then
  x=$x,"'"$line"'"
 fi
done < $1
echo $x

调用方式如下:

#通过sh来执行readtext.sh脚本,然后第一个位置传入要解析的文本位置

sh readtext.sh url.txt

#返回结果,类似如下:
'www.baidu.com','www.xxx.xxx.com','www.asds.com','www.dfasfsaa.com','www.asdsddgf.com'

这样,就实现了把文本中的数据按照一定格式拼接成一整个字符串。

然后我们就可以把这个字符串传入spark的代码中了。

大概是这样:
 

#!/bin/sh
# 使用while循环读取$1文本
while read -r line
do
 #判断是否是第一次读,是否读取到的数据是空行
 if [ -z $x ] && [ -n $line ] ; then
  x=$x"'"$line"'"
 #判断是否读取到该行不为空,不为空就拼接到x中
 elif [ ! -z $line ] ; then
  x=$x,"'"$line"'"
 fi
done < $1
echo $x

/opt/CDH/spark-2.2.0-bin-2.6.0-cdh5.12.1/bin/spark-submit \
--一大堆设置参数 \
--class XXXXX
/opt/CDH/某个sparkjar包.jar $x
#这样就可以把x这个变量传入你运行的那个类的main方法的args的第一个位置,就是args[0]

好了,简单的文章就不加太多废话了,菜鸡一个,如果有说错的,大家可以给我留言~!多谢

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值