加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash:将五行输入组合到每行输出

发布时间:2020-12-16 01:56:05 所属栏目:安全 来源:网络整理
导读:我有一个输入文件如下: MB1 00134141 MB1 12415085 MB1 13253590MB1 10598105MB1 01141484......MB1 10598105 我想组合5行并将其合并为一行. 我希望我的bash脚本处理bash脚本以生成输出,如下所示 – MB1 00134141 MB1 12415085 MB1 13253590 MB1 10598105 M
我有一个输入文件如下:

MB1 00134141 
MB1 12415085 
MB1 13253590
MB1 10598105
MB1 01141484
...
...
MB1 10598105

我想组合5行并将其合并为一行.
我希望我的bash脚本处理bash脚本以生成输出,如下所示 –

MB1 00134141 MB1 12415085 MB1 13253590 MB1 10598105 MB1 01141484
...
...
...

我写了下面的脚本,它可以工作,但对于大小为23051行的文件来说速度很慢.
我可以编写更好的代码来加快速度吗?

#!/bin/bash
file=timing.csv
x=0
while [ $x -lt $(cat $file | wc -l) ]
do
   line=`head -n $x $file | tail -n 1`
   echo -n $line " "
   let "remainder = $x % 5"
   if [ "$remainder" -eq 0 ] 
   then
        echo ""
   fi
   let x=x+1
done
exit 0

我试图执行以下命令,但它弄乱了一些数字.

cat timing_deleted.csv | pr -at5

解决方法

在纯粹的bash中,没有外部进程(为了速度):

while true; do
  out=()
  for (( i=0; i<5; i++ )); do
    read && out+=( "$REPLY" )
  done
  if (( ${#out[@]} > 0 )); then
    printf '%s ' "${out[@]}"
    echo
  fi
  if (( ${#out[@]} < 5 )); then break; fi
done <input-file >output-file

这可以正确处理行数不是5的倍数的文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读