Shellscript:是否可以格式化seq以显示每行n个数字?

时间:2014-08-21 02:19:15

标签: linux shell loops formatting seq

是否可以以显示所需范围但每行N个数字的方式格式化seq?

假设我想要seq 20,但输出如下:

1 2 3 4 5        
6 7 8 9 10        
11 12 13 14 15        
16 17 18 19 20        

我的下一个猜测是嵌套循环,但我不确定如何...... 任何帮助将不胜感激:)

3 个答案:

答案 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

ORSawk的内置变量,代表输出记录分隔符,默认值为\nNRawk的内置变量,用于保存行号。 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