Для интерактивного представления CLI о Linux я рекомендовал бы dstat
.
Они должны работать:
awk '{if(n==41){n=0;print $0}else{printf "%s ",$0;n++}}' data.txt
или
awk '{if(NR % 42 == 0){print;}else{printf "%s ",$0}}' data.txt
или
perl -ne 'if($. % 42){chomp; print "$_ "}else{ print;}' data.txt
или
perl -pne 's/\n/ / if $. % 42' data.txt
Самый легкий путь состоит в том, чтобы использовать rs
команда - если это доступно:
cat original.file | rs 32 42 > reshaped.file
Как насчет этого:
COUNT=0
while read data
do
echo -n "${data} "
let COUNT=${COUNT}+1;
if (( ${COUNT} % 42 == 0 ))
then
echo ""
fi
done < data.txt
Только потому, что я люблю использовать paste
так, можно на самом деле сделать это с paste
, хотя это не симпатично:
$ seq 100 > data.txt
$ paste -d " " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - < data.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
Если необходимо управлять числом столбцов, то добавьте/удалите соответствующую сумму тире от paste
.
Можно стать необычными и использовать цикл для управления поколением тире к paste
как так:
$ paste -d " " $(for i in $(seq 42); do echo "- ";done) < data.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
Дальнейшие улучшения могут быть сделаны к циклу. Вместо использования seq
мы можем использовать расширение фигурной скобки оболочек {#...#}
.
$ paste -d " " $(for i in {1..42}; do echo "- ";done) < data.txt
Другой менее очевидный метод должен был бы сделать xargs
сделайте управление количества символов через -n #
переключатель.
$ seq 100 | xargs -n 42
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
Таким образом, мы могли усилить этот метод как так:
$ xargs -n 42 < data.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
Эти методы будут только работать, когда данные, с которыми мы имеем дело, будут разграниченным пространством. Также знаменитый с xargs
метод, это по умолчанию, просто повторяет аргументы, но он мог быть изменен так, чтобы он мог выполнить действие для каждого из аргументов также.
Если Вы могли бы использовать Python, numpy вполне хорошо подходит для этого. Принятие файла x.txt
содержит данные, Вы могли сделать что-то как:
#!/usr/bin/env python
import numpy as np
a=np.loadtxt('x.txt', dtype='int') # load array from file x.txt into variable a
print a
b=a.reshape(32,42) # reshape array to desired shape
print b
c=a.T # Do a transpose if required
print c