2016-06-02 4 views
1

Im'm derzeit erzeugen mit:wie N colums mit printf

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

Diese Liste in NFE.txt liest und erzeugt 6 Spalten. Ich muss N Spalten generieren, wobei N eine Variable ist.

Gibt es eine einfache Möglichkeit, etwas zu sagen wie:

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

die den Wunsch Ausgabe erzeugt?

+0

was in NFE.txt ist – 123

+0

ist eine Datei, die etwa folgendes enthält: Text Text Text . . . – Est

+0

Also eine einzelne Zeile? – 123

Antwort

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 
+0

Funktioniert nicht, aber ist irgendwie meine Schuld. Ich bekomme in prueba.txt nur ein Fragezeichen ... der Wert von N verwendet ist: N = $ (grep -c "Text" -Datei) – Est

+0

"1" fehlt von T1. Entschuldigung, es ist geht. THX allot! Ich habe immer noch ein paar Fragezeichen hier und da, aber das kann gehandhabt werden – Est

1

Sie können dies tun, obwohl ich weiß nicht, wie robust es

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

Es druckt den Befehl mit der richtigen Anzahl von String sein wird, und führt es in einer Subshell.

Eingang

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

5 4 8 4 2 4 

Ausgabe

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

du in reinen bash schreiben konnte, aber dann könnte man einfach eine vorhandene Sprache. Zum Beispiel:

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

In reiner bash, könnten Sie zum Beispiel schreiben:

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

und dann verwenden, in der printf: