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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 580显卡驱动_3分钟成为矿卡鉴别大师:通用AMD二手显卡检验、测试流程送上「建议收藏」

    580显卡驱动_3分钟成为矿卡鉴别大师:通用AMD二手显卡检验、测试流程送上「建议收藏」二手矿卡坑太深,手握秘籍不求人AMD自2016年中发布Polaris系列GPU至今,长达四年的时间里,一代又一代的RX470、480、570、580等显示卡进入暗无天日的区块链矿场,挥洒着血泪和青春。在经历一次次矿难之后,貌似廉价的二手矿卡不断涌现,花2~300块钱入手一张鲁大师16~7万分的游戏显卡似乎成为所有“穷游族”的首选。Polaris10发售伊始,挑翻GTX980的口号就喊到震天响那么…

    2022年6月1日
    367
  • Swift-Moya 源码解析

    Swift-Moya 源码解析1 Moya 的定义 Moya 是一个高度抽象的网络库 他的理念是让你不用关心网络请求的底层的实现细节 只用定义你关心的业务 且 Moya 采用桥接和组合来进行封装 默认桥接了 Alamofire 使得 Moya 非常好扩展 让你不用修改 Moya 源码就可以轻易定制 官方给出几个 Moya 主要优点 编译时检查 APIendpoint 权限让你使用枚举定义各种不同 Target endpoints 把 stubs 当做一等公民对待 因此测试超级简单 2 Moya 的使用 Moya 的使用分成几步 首先需要先自定义一个

    2025年10月9日
    2
  • 2020最新Java面试题(常见面试题及答案汇总)「建议收藏」

    2020最新Java面试题(常见面试题及答案汇总)「建议收藏」Java基础篇1.JDK和JRE的区别是什么?JDK:JavaDevelopmentKit的简称,java开发工具包,提供了java的开发环境和运行环境。JRE:JavaRuntimeEnvironment的简称,java运行环境,为java的运行提供了所需环境。总结:JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含…

    2022年6月21日
    29
  • idea2021激活码永久【中文破解版】

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

    2022年3月26日
    75
  • Java学习路线图(完整详细2021版)

    Java学习路线图(完整详细2021版)作为一个男人我感觉必须得做点什么来证明一下自己,现在我又回来了,准备把自己的节操准备补一下 另外给各位未来的Java程序员说一句,别的我不清楚,学习编程请从一而终 咱们学习编程就挺难的,有这些先驱者来带领咱们学习,咱们应该感激,而且最重要的事跟着你选定的一家一直学下去 因为每家学校的学习大纲都是不一样的,但是程序员其实都是一样的,这句话你细品!仔细的品! 我不希望你忙忙碌碌的整理那么多东西,挑肥拣瘦的,最后自己学的东西还是缺失的,要不就…

    2022年5月17日
    85
  • sql declare的用法_oracle declare语法

    sql declare的用法_oracle declare语法平时写SQL查询、存储过程都是凭着感觉来,没有探究过SQL的具体语法,一直都是按c#那一套往SQL上模仿,前几天项目中碰到一个问题引起了我对declare定义变量的作用域的兴趣。大家都知道c#中的局部变量,在if中如果我们定义一个变量的话他的作用到if结束为止,if外是不识别这个变量的,else里都不能使用,简单的写一下。if (true){   Int32 i = 1;   Co…

    2022年8月20日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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