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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python精彩编程200例-Python创意编程200例turtle篇[通俗易懂]

    简介:Python是一种高阶计算机语言。它更接近自然语言,学习成本低,开发效率高。如今越来越多的中小学生都在开始学习Python了。我们可以预见,全民会Python的日子不久就会到来,各行各业的人未来都能用Python解决各自领域的问题或创造出独特魅力的作品。在Python的普及过程中,海龟模块(turtle)将会功不可没。它来源于上个世纪60年代的logo计算机语言,就是通过指挥一只小海龟移动…

    2022年4月6日
    198
  • Java模式(适配器模式)

    Java模式(适配器模式)

    2021年11月14日
    45
  • 2022年Redis最新面试题第6篇 – Redis淘汰策略「建议收藏」

    2022年Redis最新面试题第6篇 – Redis淘汰策略「建议收藏」Redis过期键的删除策略?出现概率:★★★★Redis过期键的删除策略是:定期删除+惰性删除。1)、关于定期删除,Redis默认会每隔100ms就随机选取一些已经过期了的key,检查其是否过期,如果已经过期就删除。不过假设Redis里放了100w个key,而且都设置了过期时间,你每隔几百毫秒,就检查100w个key,那Redis基本上就卡死了,cpu负载也会很高的,基本都消耗在检查过期key上了。注意,这里可不是每隔100ms就遍历所有的设置过期时间的key,那样就是一场性能上的灾难。实际情况是每

    2022年10月21日
    3
  • 数据滤波算法集合「建议收藏」

    数据滤波算法集合「建议收藏」由于要进行数据处理,就利用网络资源总结各种滤波方法以便日后查阅。一、限幅滤波法实现步骤:根据经验法选择最大偏差值E。|value_now-value_before|&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;=E,value_now有效,否则其无效且将其舍弃,最后令value_now=value_before。实现程序:#defineE10//value取值范围为90~110intv

    2022年5月3日
    105
  • mysql数据类型tinyint_mysql字段类型长度

    mysql数据类型tinyint_mysql字段类型长度在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127。无符号的范围是0到255(见官方《MySQL5.1参考手册》http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types)。Tinyint占用1字节的存储空间,即8位(bit)。那么Tinyint的取值范围怎么来的呢?我们先看无符号…

    2022年9月21日
    1
  • 公网RTSP视频流「建议收藏」

    公网RTSP视频流「建议收藏」公网RTSP视频流测试地址:rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov

    2022年10月18日
    2

发表回复

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

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