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)
上一篇 2022年7月24日 上午8:46
下一篇 2022年7月24日 上午8:46


相关推荐

  • Java数据结构系列之——栈(2):栈的链式存储结构及其操作

    Java数据结构系列之——栈(2):栈的链式存储结构及其操作

    2022年1月19日
    49
  • Cisco Packet Tracer中配置静态路由与缺省路由(默认路由)

    Cisco Packet Tracer中配置静态路由与缺省路由(默认路由)静态路由介绍 静态路由是指由用户或网络管理员手工配置的路由信息 当网络的拓扑结构或链路的状态发生变化时 网络管理员需要手工去修改路由表中相关的静态路由信息 静态路由信息在缺省情况下是私有的 不会传递给其他的路由器 当然 网管员也可以通过对路由器进行设置使之成为共享的 静态路由一般适用于比较简单的网络环境 在这样的环境中 网络管理员易于清楚地了解网络的拓扑结构 便于设置正确的路由信息 格式

    2026年3月18日
    2
  • iPhone越狱cydia源大全

    iPhone越狱cydia源大全越狱后如何添加 cydia 源及 cydia 源大全 希望对大家能有所帮助 工具 原料 cydia 步骤 方法越狱后添加 cydia 源进入 Cydia 管理中找到软件源 先添加源 进入 软件源 之后点击右上角的编辑 然后点击左上角的添加 输入源的地址 1 Cydia 贴吧源 推荐 apt cydiaba cn2 HackCN 源

    2026年3月20日
    5
  • nginx php apache php 对比,Apache和nginx的比较「建议收藏」

    nginx php apache php 对比,Apache和nginx的比较「建议收藏」nginx相对apache的优点:● 轻量级,同样起web服务,比apache占用更少的内存及资源● 抗并发,nginx处理请求是异步非阻塞的,而apache则是阻塞型的,在高并发下nginx能保持低资源低消耗高性能● 高度模块化的设计,编写模块相对简单● 社区活跃,各种高性能模块出品迅速啊● Nginx支持更多的并发连接,能够支持高达50000个并发连接数的相应● 能在不间断服务…

    2022年6月6日
    31
  • JAVASSM框架面试题「建议收藏」

    JAVASSM框架面试题「建议收藏」最全ssm框架面试题

    2022年6月17日
    30
  • FormatDateTime的用法

     FormatDateTime的用法声明:function FormatDateTime(const Format: string; DateTime: TDateTime): string; overload;当然和Format一样还有一种,但这里只介绍常用的第一种Format参数是一个格式化字符串。DateTime是时间类型。返回值是一种格式化后的字符串重点来看Format参数中的指令字符

    2022年4月8日
    67

发表回复

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

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