0
我正在寫一個bash腳本來對文件進行一些文本處理。文件的一部分包含必須重新格式化的值的網格,以便具有正確數量的列。bash調整文本網格
這裏是一個網格的例子,在這種情況下,必須格式化爲16列;
702.0 697.0 687.0 685.0 693.0 700.0 693.0 681.0 676.0 684.0
694.0 700.0 704.0 710.0 710.0 710.0
711.0 704.0 697.0 690.0 693.0 699.5 696.0 692.0 680.0 687.0
696.0 705.0 709.0 714.0 716.0 714.0
722.0 711.0 708.0 700.0 696.0 703.0 701.0 692.0 678.0 684.0
695.0 707.0 712.0 713.0 716.0 717.0
727.0 718.0 712.0 707.0 705.0 706.5 701.0 692.0 680.0 683.0
693.0 706.0 714.0 718.0 720.0 718.0
732.0 728.0 725.0 718.0 715.0 708.0 699.0 693.0 683.0 681.0
694.0 703.0 711.0 715.0 723.0 727.0
738.0 735.0 732.0 721.0 723.0 712.0 702.0 696.0 690.0 681.0
693.0 701.0 709.0 712.0 720.0 726.0
736.5 736.5 734.0 728.0 726.5 718.8 714.5 707.5 701.0 687.0
684.5 695.5 703.0 708.0 716.0 721.5
736.0 734.0 727.0 726.0 723.0 720.0 723.0 713.0 708.0 699.0
678.0 686.0 696.0 706.0 712.0 714.0
729.0 726.0 717.0 716.0 715.0 717.0 720.0 714.0 710.0 700.0
678.0 679.0 689.0 700.0 702.0 708.0
722.0 719.0 713.0 709.0 705.0 711.0 719.0 716.0 706.0 697.0
680.0 679.0 682.0 694.0 698.0 702.0
712.0 713.0 707.0 704.0 697.0 708.5 719.0 715.0 705.0 693.0
678.0 680.0 682.0 683.0 685.0 691.0
707.0 706.0 702.0 693.0 699.0 710.5 712.0 707.0 701.0 687.0
677.0 687.0 686.0 686.0 680.0 682.0
這是我迄今爲止的腳本,它沒有按照預期執行;
#!/bin/bash
Target=${1:-"grid.dat"}
Outfile="grid.new.dat"
ColumnCount="16"
RawGrid=()
while read line; do
RawGrid+=($line)
done < <(cat ${Target})
echo "${#RawGrid[@]} cells found!"
echo "" > ${Outfile}
for ((i=0; i < ${#RawGrid[@]}; i+=1)); do
echo -n " ${RawGrid[$i]}" >> $Outfile
((i % ${ColumnCount} == 0)) && ((i > 0)) && echo "" >> $Outfile # New row
done
我特別堅持的部分是使用正確數量的列打印網格。也許我沒有正確填充數組?
試'的grep -o '[0-9] \ +' ip.txt | pr -16ats' – Sundeep
如果列數大於20〜,這似乎不起作用。它還會刪除每列之前的空格,必須予以保留。 – BZP
間距丟失,同意..但這應該工作,不管列數 – Sundeep