我目前正在使用:
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
哪会产生欲望输出?
答案 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)