如何使用printf生成N列

时间:2016-06-02 14:04:04

标签: bash

我目前正在使用:

printf "%14s  %14s  %14s  %14s  %14s %14s\n" $(cat NFE.txt)>prueba.txt

这将读取NFE.txt中的列表并生成6列。我需要生成N列,其中N是变量。

是否有一种简单的方式可以说:

printf "N*(%14s)\n" $(cat NFE.txt)>prueba.txt

哪会产生欲望输出?

3 个答案:

答案 0 :(得分:1)

# T1 is a white string with N blanks
T1=$(printf "%${N}s")

# Replace every blank in T with string %14s and assign to T2
T2="${T// /%14s }"
# Pay attention to that T2 contains a trailing blank.

# ${T2% } stands for T2 without a trailing blank
printf "${T2% }\n" $(cat NFE.txt)>prueba.txt

答案 1 :(得分:1)

你可以做到这一点虽然我不知道它会有多强大

 $(printf 'printf '; printf '%%14s%0.s' {1..6}; printf '\\n') $(<file)
                                           ^
                                   This is your variable number of strings

它打印出具有正确字符串数的命令,并在子shell中执行。

输入

10 20 30 40 50 1 0
1 3 45 6 78 9 4 3
123 4

5 4 8 4 2 4

输出

        10            20            30            40            50             1
         0             1             3            45             6            78
         9             4             3           123             4             5
         4             8             4             2             4

答案 2 :(得分:0)

你可以用纯粹的bash写这个,但是你可以使用现有的语言。例如:

printf "$(python -c 'print("%14s  "*6)')\n" $(<NFE.txt)

在纯粹的bash中,你可以编写,例如:

repeat() { (($1)) && printf "%s%s" "$2" "$(times $(($1-1)) "$2")"; }

然后在printf中使用它:

printf "$(repeat 6 "%14s  ")\n" $(<NFE.txt)