Вы сказали, что вам нужны только советы и подсказки, но жизнь слишком коротка, чтобы предоставить здесь учебник по awk, поэтому вот как это сделать, если вы использовали -
вместо _
в качестве символа разделителя строк без объяснения:
$ cat gen.awk
BEGIN {
numCols = n + 1
colWidth = dn
numRows = m + 1
rowHeight = dm
colSep = "|"
rowSep = sprintf("%*s",colWidth,"")
gsub(/ /,"-",rowSep)
for (rowNr=1; rowNr<=numRows; rowNr++) {
for (subRowNr=1; subRowNr<=rowHeight; subRowNr++) {
for (colNr=1; colNr<=numCols; colNr++) {
printf "%*s%s", colWidth, "", (colNr<numCols ? colSep : ORS)
}
}
if ( rowNr < numRows ) {
for (colNr=1; colNr<=numCols; colNr++) {
printf "%s%s", rowSep, (colNr<numCols ? colSep : ORS)
}
}
}
}
.
$ awk -v n=3 -v m=2 -v dn=2 -v dm=1 -f gen.awk
| | |
--|--|--|--
| | |
--|--|--|--
| | |
.
$ awk -v n=5 -v m=4 -v dn=6 -v dm=3 -f gen.awk
| | | | |
| | | | |
| | | | |
------|------|------|------|------|------
| | | | |
| | | | |
| | | | |
------|------|------|------|------|------
| | | | |
| | | | |
| | | | |
------|------|------|------|------|------
| | | | |
| | | | |
| | | | |
------|------|------|------|------|------
| | | | |
| | | | |
| | | | |
, и вы можете гуглить конструкции, добавив print
s, et c. чтобы понять, что он делает, извлеките уроки и исправьте его, чтобы вывести точный формат, который вы хотите. Я также настоятельно рекомендую вам приобрести книгу Арнольда Роббинса «Эффективное программирование на Awk», 4-е издание, - все остальные книги о awk неполны и / или устарели и / или имеют другие проблемы.