Wie Zeichen in Zeichenfolgen eingefügt werden können, die zu einer Spalte gehören, die aus einem Eingabebefehl mit awk und sed resultiert

0

Hier ist eine Formel, die für meinen Zweck geeignet ist - unter anderem druckt sie nur Dateien und verwendet sie für Größen Befugnisse von 1024, 2 ^ 10 -. Die Größe der beteiligten Datei beträgt 1382 Bytes (1,35 KiB ):

# ls -lh | grep -v '^d' | sed -n '2p' | awk '{print $5, $(NF)}'
1,4K anaconda-ks.cfg

Bedingungen zu sich bewerben in der Formel:

  • '' einfügen Vor das zuletzt Zeichen der ersten Säule der Ausgabe;
  • einfügen ' iB ' nach dem das zuletzt Zeichen der ersten Säule der Ausgabe;
  • zwei Nachkommastellen zum nächster Wert (z. B. 1,095 = 1,09, 1,096 = 1,10);
  • Spalten in Bezug auf Größen und Dateien drucken.

Ausgabe an leisten Sobald die Bedingungen erfüllt sind:

# ls -lh | grep -v '^d' | sed <expression> | awk <expression>
1,35 KiB anaconda-ks.cfg
Ricky Tigg
quelle
1
Bitte erläutern Sie, welche Ergebnisse Sie wünschen und welche Ergebnisse Sie aktuell erhalten. Es wäre auch hilfreich zu erklären, warum Sie dies überhaupt tun.
uSlackr

Antworten:

0

Du solltest Vermeiden Sie das Parsen der Ausgabe von ls. Verwenden Sie stattdessen die stat Befehl.

Und anstatt zu versuchen, ein neues Zahlenformat zu fälschen, verwenden Sie den Befehl numfmt von den coreutils.

So könnten Sie dies verwenden:

for i in *; do 
  printf "%s %s\n" $(stat -c %s "$i" | numfmt --to=iec-i --suffix=B --format "%.2f") "$i"
done
oliv
quelle