是否可以以显示所需范围但每行N个数字的方式格式化seq?
假设我想要seq 20,但输出如下:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
我的下一个猜测是嵌套循环,但我不确定如何...... 任何帮助将不胜感激:)
答案 0 :(得分:4)
使用可以使用awk
根据您的需要对其进行格式化。
$ seq 20 | awk '{ORS=NR%5?FS:RS}1'
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
ORS
是awk
的内置变量,代表输出记录分隔符,默认值为\n
。 NR
是awk
的内置变量,用于保存行号。 FS
是内置变量,代表Field Separator,默认值为space。 RS
是内置变量,代表Record Separator,默认值为\n
。
我们的行动是一个三元运算符,用于检查NR%5
是否为真。当NR%5
不为0(因此为真)时,它使用FS
作为输出记录分隔符。当它为假时,我们使用RS
作为输出记录分隔符的换行符。
1
会触发awk
默认操作,即打印该行。
答案 1 :(得分:3)
您可以使用xargs
来限制每行显示的顺序。
$ seq 20 | xargs -n 5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
参数-n 5
告诉xargs只显示5个序列号。
如果你有bash,你可以使用内置序列。
echo {1..20} | xargs -n 5
答案 2 :(得分:1)
使用Bash:
while read num; do
((num % 5)) && printf "$line " || echo "$line"
done < <(seq 20)
或者:
for i in {1..20}; do
s+="$i "
if ! ((i % 5)); then
echo $s
s=""
fi
done