2017-07-05 12 views
0

我有写出来的模拟数据的很多文件:排序块成列

0.00000000E+00 
    0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 
    0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 
    0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 
    0.93071889E-02 
    0.14952319E-13 0.55746201E-11 0.89816722E-11 0.46833532E-11 0.14964636E-13 
-0.92995325E-47 0.79969902E-46 0.00000000E+00 -0.21442451-105 -0.86924526E-93 
    0.00000000E+00 -0.85777333E-93 0.48179949-102 0.00000000E+00 
    0.18614378E-01 
    0.12050471E-12 0.44928328E-10 0.72404536E-10 0.37744496E-10 0.12066634E-12 
    0.25848493E-36 -0.13804858E-35 0.56376226E-83 0.20648121E-74 -0.89608567E-66 
-0.20861629E-76 -0.87854256E-66 -0.23574755E-73 -0.73275846E-82 

所需的输出是:写在自己的列和列的每个数据块开头的“每个块的头“,这是第一个数字。例如最后一块应该是这样的:

0.18614378E-01 0.12050471E-12 0.44928328E-10 0.72404536E-10 0.37744496E-10 0.12066634E-12 0.25848493E-36 -0.13804858E-35 0.56376226E-83 0.20648121E-74 -0.89608567E-66 -0.20861629E-76 -0.87854256E-66 -0.23574755E-73 -0.73275846E-82 

我想过用AWK与FS =””,但我不知道怎么告诉我的bash脚本停止阅读15号后如何保存那15个数字并输出到一个单独的文件(使用printf也许?)

谢谢!

+2

的问题是高我不清楚。 22个号码?我能看到的是一个数字,后面是5 + 5 + 4的数字(14)。目标输出是否清晰:每行15个数字? – netizen

+0

我编辑了我的帖子 – Tuni

回答

1

如果你想在一个文件中写入输出,这是一个bash一行程序,将工作:

IFS=' ' read -r -a array <<< $(cat results|tr -s ' ' |tr -d '\n'); while test "${#array[@]}" -ge "1"; do for i in {1..15}; do echo -n ${array[0]}; array=("${array[@]:1}"); done; echo; done > results_formatted 
+0

我在'echo -n $ {array [0]}'之后加了'echo -n“''在每个数字之间留有空格。 你能解释一下'array =(“$ {array [@]:1}”)'? 另一个问题:我的文件大小约为25mb,这使得这种方法非常缓慢。是否由于读取数组命令? – Tuni

+1

“$ {array [@]:1]”表示数组从1开始的元素,而数组为0,并且我们刚刚使用了元素0. 速度,当然,我们必须考虑到bash是一个shell,它不是一个“优化的数据处理语言解释器”。我总是看看perl这样的东西,我的回答只是一个练习。 – netizen

2

如果数据从未有两条线彼此接近含有1柱:

awk '{if(NF==1 && NR!=1){printf("\n%s",$0)} else{printf("%s",$0)}}' file 
1

AWK溶液:

awk 'BEGIN{ t="" }NR>1 && NF==1{ print t > "file"++c; t="" } 
    { t=(t!="")? sprintf("%s %s",t,$0) : sprintf("%s",$0) } 
    END{ if (t) print t > "file"++c }' file 

结果:

> cat file1 
0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 

> cat file2 
0.93071889E-02 0.14952319E-13 0.55746201E-11 0.89816722E-11 0.46833532E-11 0.14964636E-13 -0.92995325E-47 0.79969902E-46 0.00000000E+00 -0.21442451-105 -0.86924526E-93 0.00000000E+00 -0.85777333E-93 0.48179949-102 0.00000000E+00 

> cat file3 
0.18614378E-01 0.12050471E-12 0.44928328E-10 0.72404536E-10 0.37744496E-10 0.12066634E-12 0.25848493E-36 -0.13804858E-35 0.56376226E-83 0.20648121E-74 -0.89608567E-66 -0.20861629E-76 -0.87854256E-66 -0.23574755E-73 -0.73275846E-82