shell循环读取文件拼接字符串

shell循环读取文件拼接字符串1注意通道和重定向的区别通道会开启子shell,于是通道语句块内的变量修改是无法影响到其外的变量的,故使用重定向;2windows文件末尾是/r/n拼接来自windows系统的文件务必首先注意:[nash5camFiles]#cat-AcamFiles.ori0.863631-0.269646-0.425949^M$

大家好,又见面了,我是你们的朋友全栈君。

1 注意通道和重定向的区别

通道会开启子shell,于是通道语句块内的变量修改是无法影响到其外的变量的,故使用重定向;

2 windows文件末尾是/r/n

拼接来自windows系统的文件务必首先注意:

[nash5 camFiles]# cat -A camFiles.ori     
0.863631 -0.269646 -0.425949^M$                                                                                                                     [324/1948]
-0.502824 -0.400104 -0.766214^M$                                               
1.44829 4.57325 -2.46031^M$  

倘若不去调回车字符’\r’(^M),那么多行拼接的结果只能看到最后一行的结果,所以需要首先去掉所有文件里的’\r’字符:

for i in $(ls); do sed -i 's|\r||g' $i; done

3 实例代码:

输入文件:

[nash5 camFiles]# cat tmp.raw 
# Bundle file v0.3
63 66674
4318.92 0 0
-0.999016 0.0442186 0.003457
0.0197872 0.514087 -0.85751
-0.0396951 -0.856598 -0.514456
-0.285562 3.57279 -1.96389

读取成2行:

[nash5 camFiles]# cat tmp.cam
-0.285562 3.57279 -1.96389  -0.999016 0.0442186 0.003457 0.0197872 0.514087 -0.85751 -0.0396951 -0.856598 -0.514456
4318.92 0 0 1 0.5 0.5

调用方式:

sh a.sh tmp.raw

实现代码:

#/usr/bin/bash
i=-1
fcount=0
txtytz=""
matrix=""
focalLend0d1=""
ppxppy="0.5 0.5"
paspect="1"  

#创建中间文件
cat $1 | tail -n +3 $1  > tmp.ori
#从第3行开始读取文件
while read line
do
  # for every 4 lines
  let i=i+1
  echo "-> "$line
  case $i in
    0)
      focalLend0d1=$line
      # echo $focalLend0d1
    ;;
    1)
      matrix=$(echo $matrix" "$line)
      # echo $matrix
    ;;
    2)
      matrix=$matrix" "$line
      # echo $matrix
    ;;
    3)
      matrix=$matrix" "$line
      # echo $matrix
    ;;
    4)
      txtytz=$line 
      # echo $txtytz
    ;;
  esac
  
  if [[ $i == 4 ]]
  then
    pushd $FILE_DIR
    echo $txtytz" "$matrix > tmp.cam
    echo $focalLend0d1" "$paspect" "$ppxppy >> tmp.cam
    # echo $txtytz" "$matrix
    popd
    let i=-1
    let fcount=fcount+1
    txtytz=""
    matrix=""
    focalLend0d1=""
    break
  fi 
done < tmp.ori
rm tmp.ori
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163956.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • JWT原理构成与使用(带案例简单易懂)[通俗易懂]

    JWT原理构成与使用(带案例简单易懂)[通俗易懂]JWT原理构成与使用项目架构开发模式:前后端分离前端框架:VUE后端框架:DjangoRESTframework功能部分:管理员登录,数据统计,用户管理,商品管理,订单管理,权限管理主要技术:JWT用户认证,CORS跨域跨域CORS我们的前端和后端分别是两个不同的端口位置域名前端服务www.meiduo.site:8080后端服务www.m…

    2022年10月10日
  • .deb文件如何安装,Ubuntu下deb安装方法图文详解[通俗易懂]

    .deb文件如何安装,Ubuntu下deb安装方法图文详解[通俗易懂]摘自:https://www.linuxidc.com/Linux/2018-11/155380.htmdeb包是Debian,Ubuntu等Linux发行版的软件安装包,扩展名为.deb,是类似于rpm的软件包,Debian,Ubuntu系统不推荐使用deb软件包,因为要解决软件包依赖问题,安装也比较麻烦。如果Ubuntu要安装新软件,已有deb安装包(例如:linux…

  • CSS行高line-height的理解建议收藏

    一、行高的字面意思“行高“顾名思义指一行文子的高度。具体来说是指两行文子间基线间的距离。基线是在英文字母中用到的一个概念,我们刚学英语的时候使用到的那个英语本子每行有4条线,其中底部第二条线就是基线,

    2021年12月20日
  • python破解版激活码【中文破解版】

    (python破解版激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html83PVI25FMO-eyJsaWN…

  • json对象转换为实体类_对象和实体的区别

    json对象转换为实体类_对象和实体的区别//importcom.yonyou.sscip.gson.Gson;//jSONObject数据{“pk_org”:”TEST”,”pk_group”:”TEST”,”code”:”a”,”name”:”a”}//1、创建Gson对象 Gsongson=newGson(); //2、调用toJson(Object)将对象转为字符串 StringJsonStr=gson.toJson(json); System.out.printl.

  • jQuery的下载以及使用[通俗易懂]

    jQuery的下载以及使用[通俗易懂]一、版本选择jQuery的版本有很多,大家在选择版本的时候,一般原则是越新越好,但其实不然,jQuery版本是在不断进步和发展的,最新版是当时最高技术水平,也是最先进的技术理念。如何选择jQuery版本是个值得思考的问题目前jQuery有三个大版本:1.x:兼容ie678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就可以了,最终版本:1.12.4(2…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号