LINUX.ORG.RU

AWK... разбивка большого массива в один столбец на заданное количество


0

2

Разделители на входе (;) Есть запись вида на входном:

sd001; sd002; sd003; sd004; sd005; sd006; sd007; sd008; sd009; sd010; sd011; sd012; sd013; sd014; sd015; sd016; sd017; sd018; sd019; sd020;

Выходной хотел получить:

sd001; sd002; sd003; sd004

sd005; sd006; sd007; sd008

sd009; sd010; sd011; sd012

Например каждый 4 - тый ( ; ) удаляем. Каждый 10 или каждый 50 тый. Предложите решение, заранее спасибо.



Последнее исправление: Mirage (всего исправлений: 5)
NUM=10
... | awk -v c=$NUM '{for(i=1;i<=NF;i+=c) {for(j=i;j<(i+c);j++){printf $j" "}; printf "\n"}}'

sd001; sd002; sd003; sd004; sd005; sd006; sd007; sd008; sd009; sd010; 
sd011; sd012; sd013; sd014; sd015; sd016; sd017; sd018; sd019; sd020; 
anonymous
()

xargs -d';' -n4 echo

anonymous
()
NUM=4
... | grep -oE '([^;]+[; ]*){'$NUM'}'
anonymous
()
Ответ на: комментарий от anonymous

awk '{for(i=1;i<=NF;i+=4) {print $i,$(i+1),$(i+2),$(i+3)}}'

anonymous (08.05.2013 10:06:33)

Благодарю.

Данный вариант отрабатывает. Подходит для небольшого количества столбцов. А если 50 или 150, длинно очень.

Далее Условие: если входной массив будет иметь не (;) а только разделитель - «Знак переноса» ?

ed0234411

ed0234412

ed0234413

ed0234414

ed0234415

ed0234416

ed0234417

ed0234418

ed0234419

ed0234420

Mirage
() автор топика
Ответ на: комментарий от Mirage

Всю тему прочитай, разжевывать никто (из вменяемых) не будет.

anonymous
()

cat 1.txt | awk -F'; ' '{printf(«%s;%s;%s;%s\n», $1, $2, $3, $4); printf(«%s;%s;%s;%s\n», $5, $6, $7, $8);}'

anonymous
()
Ответ на: комментарий от unterwulf

unterwulf

Спасибо, понравился данный вариант.

Mirage
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.