print output to 3 separate columns
I would recommend using printf
, e.g.:
printf "%-30s | %-30s | %-30s" "$FILETIME" "$FILE" "$TOPLINE"
Where %-30s
means to reserve 30 characters for the input argument of type string. The -
denotes left alignment.
You can use the column
command which on Linux is part of the util-linux package. It's also available on FreeBSD, NetBSD, OpenBSD and DragonFly BSD.
Combine this with a loop and you're in business, e.g.:
#!/bin/sh
MYPATH=/
TOTALFILE=$(ls $MYPATH/* | wc -l)
FILE=$(ls -1tcr $MYPATH/* | head -5 | rev | cut -d/ -f1 | rev)
declare -a FILES
declare -a FILETIME
OUTPUT="FILENAME CREATED TIME ERROR_HEADER\n\n------------------------------ ----------------------------- ----------------------------------- ------$"
for i in $MYPATH/*;
do
FILES[${#FILES[@]}]="$i"
FILETIME[${#FILETIME[@]}]=$(stat --format=%y $i | head -5 | cut -d'.' -f1)
TOPLINE=$(head -1 $i | grep -Po '".*?"' | head -5)
OUTPUT="$OUTPUT\n${FILES[${#FILES[@]}-1]} ${FILETIME[${#FILETIME[@]}-1]} $TOPLINE\n"
done
echo -ne $OUTPUT | column -t
I would go with a a loop
printf " %-20s | %-20s | %-20s\n " FILE\ CREATED\ TIME FILE\ NAME ERROR\ HEAD
for i in "$MYPATH"/*
do
printf "%-20s | %-20s | %-20s\n " $FILENAME $FILE $TOPLINE
done
printf "Total Files: %s" $TOTALFILES