с помощью команды AWK Я попытался напечатать верхний треугольник матрицыкак я могу напечатать верхний треугольник матрицы
awk '{for (i=1;i<=NF;i++) if (i>=NR) printf $i FS "\n"}' matrix
но выход показан в виде одной строки
с помощью команды AWK Я попытался напечатать верхний треугольник матрицыкак я могу напечатать верхний треугольник матрицы
awk '{for (i=1;i<=NF;i++) if (i>=NR) printf $i FS "\n"}' matrix
но выход показан в виде одной строки
Рассмотрим эту матрицу образца :
$ cat matrix
1 2 3
4 5 6
7 8 9
Для печати верхнего правого треугольника:
$ awk '{for (i=1;i<=NF;i++) printf "%s%s",(i>=NR)?$i:" ",FS; print""}' matrix
1 2 3
5 6
9
Или:
$ awk '{for (i=1;i<=NF;i++) printf "%2s",(i>=NR)?$i:" "; print""}' matrix
1 2 3
5 6
9
Для печати левый верхний треугольник:
$ awk '{for (i=1;i<=NF+1-NR;i++) printf "%s%s",$i,FS; print""}' matrix
1 2 3
4 5
7
Или:
$ awk '{for (i=1;i<=NF+1-NR;i++) printf "%2s",$i; print""}' matrix
1 2 3
4 5
7
Это может работать для вас (GNU SED):
sed -r ':a;n;H;G;s/\n//;:b;s/^\S+\s*(.*)\n.*/\1/;tb;$!ba' file
Используйте пространство удержания в качестве счетчика для тех строк, которые были обработаны, и для каждой текущей строки удалите эти много полей из передней части текущей строки.
N.B. Счетчик устанавливается после печати текущей строки, иначе первая строка будет минус первое поле.
Поразмыслив альтернатива/более элегантное решение:
sed -r '1!G;h;:a;s/^\S+\s*(.*)\n.*/\1/;ta' file
И напечатать левый верхний треугольник:
sed -r '1!G;h;:a;s/^([^\n]*)\S+[^\n]*(.*)\n.*/\1\2/;ta' file
$ awk '{for (i=NR;i<=NF;i++) printf "%s%s",$i,(i<NF?FS:RS)}' file
1 2 3
5 6
9
Почему бы не использовать трехкомпонентной для второго '% с 'тоже:' {for (i = 1; i <= NF; i ++) printf "% s% s", (i