我有一个输入文件,如下所示:

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的倍数的文件。

08-26 21:39