How to format output of script to have equal number of spaces
Here's my script:
#!/bin/bash
declare -a a=(`ls`)
declare -a b=()
declare -a sorted_arr=()
var =0
while [ -n "${a[$var]}" ]
do
echo "${a[$var]:0:10} |"
var=`expr $var + 1`
done
This script produces inconsistent spacing
another_fi |
f2.txt |
file1.txt |
file3.txt |
What I want is for vertical pipeline symbols to be aligned
another_fi |
f2.txt |
file1.txt |
file3.txt |
bash scripts
add a comment |
Here's my script:
#!/bin/bash
declare -a a=(`ls`)
declare -a b=()
declare -a sorted_arr=()
var =0
while [ -n "${a[$var]}" ]
do
echo "${a[$var]:0:10} |"
var=`expr $var + 1`
done
This script produces inconsistent spacing
another_fi |
f2.txt |
file1.txt |
file3.txt |
What I want is for vertical pipeline symbols to be aligned
another_fi |
f2.txt |
file1.txt |
file3.txt |
bash scripts
2
Can you post the code instead of posting its picture?
– choroba
Jun 8 '17 at 13:36
3
Please drop the pictures showing text, replacing them with actual text, then clarify what you want to achieve. Actually at the moment there is no question mark in the entire post.
– Andrea Lazzarotto
Jun 8 '17 at 14:03
1
Fixed the formatting guys :)
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:24
add a comment |
Here's my script:
#!/bin/bash
declare -a a=(`ls`)
declare -a b=()
declare -a sorted_arr=()
var =0
while [ -n "${a[$var]}" ]
do
echo "${a[$var]:0:10} |"
var=`expr $var + 1`
done
This script produces inconsistent spacing
another_fi |
f2.txt |
file1.txt |
file3.txt |
What I want is for vertical pipeline symbols to be aligned
another_fi |
f2.txt |
file1.txt |
file3.txt |
bash scripts
Here's my script:
#!/bin/bash
declare -a a=(`ls`)
declare -a b=()
declare -a sorted_arr=()
var =0
while [ -n "${a[$var]}" ]
do
echo "${a[$var]:0:10} |"
var=`expr $var + 1`
done
This script produces inconsistent spacing
another_fi |
f2.txt |
file1.txt |
file3.txt |
What I want is for vertical pipeline symbols to be aligned
another_fi |
f2.txt |
file1.txt |
file3.txt |
bash scripts
bash scripts
edited Jun 8 '17 at 14:15
Sergiy Kolodyazhnyy
70.6k9147310
70.6k9147310
asked Jun 8 '17 at 13:30
SeHoonSeHoon
663
663
2
Can you post the code instead of posting its picture?
– choroba
Jun 8 '17 at 13:36
3
Please drop the pictures showing text, replacing them with actual text, then clarify what you want to achieve. Actually at the moment there is no question mark in the entire post.
– Andrea Lazzarotto
Jun 8 '17 at 14:03
1
Fixed the formatting guys :)
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:24
add a comment |
2
Can you post the code instead of posting its picture?
– choroba
Jun 8 '17 at 13:36
3
Please drop the pictures showing text, replacing them with actual text, then clarify what you want to achieve. Actually at the moment there is no question mark in the entire post.
– Andrea Lazzarotto
Jun 8 '17 at 14:03
1
Fixed the formatting guys :)
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:24
2
2
Can you post the code instead of posting its picture?
– choroba
Jun 8 '17 at 13:36
Can you post the code instead of posting its picture?
– choroba
Jun 8 '17 at 13:36
3
3
Please drop the pictures showing text, replacing them with actual text, then clarify what you want to achieve. Actually at the moment there is no question mark in the entire post.
– Andrea Lazzarotto
Jun 8 '17 at 14:03
Please drop the pictures showing text, replacing them with actual text, then clarify what you want to achieve. Actually at the moment there is no question mark in the entire post.
– Andrea Lazzarotto
Jun 8 '17 at 14:03
1
1
Fixed the formatting guys :)
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:24
Fixed the formatting guys :)
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:24
add a comment |
1 Answer
1
active
oldest
votes
The main reason is because your echo command takes x number of characters from variable and pads 14 spaces. That means total number of chars in output string space won't be consistent.
Instead , you might want to use printf
with width specifier %-10s
for left padding like this:
bash-4.3$ for i in "${a[@]}"; do printf "%-10s%-4s|n" "${i:0:10}" " "; done
1.wav |
2.wav |
3.wav |
input.txt |
This way whatever variable you have will be made to fit within 10 characters,and to those 10 characters we pad 4. -
sign makes each string left justified.
Number -10
in %-10s
should remain the same to ensure that even if the file is shorter than 10 characters, we still get a 10 character string with spaces padded. But %-4s
part can be varied. For instance in the example above, %-4s
will have 4 spaces there, but if we want to have 14 spaces, then use %-14s
.
Note that it's generally recommended against of parsing output of ls, which is exactly what you're doing. As alternative, we can use find
command with while IFS= read -r -d ''
structure like this:
bash-4.3$ find -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file;
> do
> printf "%-10s%-4s|n" "${file:0:10}" " "
> done
./3.wav |
./1.wav |
./2.wav |
./.swp |
./input.tx |
Note that find
is recursive, so it works on sub-directories as well. If you want to avoid that, use -maxdepth 1
option.
Note that find
also has its own -printf
option, which may be more efficient to have everything done via one process than two ( that's find
plus the subshell in which while
runs ):
$ find /bin -type f -printf "%-15f|n" 2>/dev/null | head -n 5
hostname |
nc.traditional |
fusermount |
loadkeys |
zless |
Ideally what I'd suggest is write everything to temporary file, figure out the longest line ( aka longest filename in the file ) and pad however many spaces you want to there accordingly.
I ran it but... I want to print is./3.wav | ./1.wav | ./2.wav |
I don't want to include ./randomfi.
– SeHoon
Jun 8 '17 at 14:32
OK I'll fix that in a minute. Hold on
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:37
@최세훈 If the answer solved your question, can you please mark my answer as accepted by checking the gray checkmark on the side.
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:51
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "89"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f923396%2fhow-to-format-output-of-script-to-have-equal-number-of-spaces%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The main reason is because your echo command takes x number of characters from variable and pads 14 spaces. That means total number of chars in output string space won't be consistent.
Instead , you might want to use printf
with width specifier %-10s
for left padding like this:
bash-4.3$ for i in "${a[@]}"; do printf "%-10s%-4s|n" "${i:0:10}" " "; done
1.wav |
2.wav |
3.wav |
input.txt |
This way whatever variable you have will be made to fit within 10 characters,and to those 10 characters we pad 4. -
sign makes each string left justified.
Number -10
in %-10s
should remain the same to ensure that even if the file is shorter than 10 characters, we still get a 10 character string with spaces padded. But %-4s
part can be varied. For instance in the example above, %-4s
will have 4 spaces there, but if we want to have 14 spaces, then use %-14s
.
Note that it's generally recommended against of parsing output of ls, which is exactly what you're doing. As alternative, we can use find
command with while IFS= read -r -d ''
structure like this:
bash-4.3$ find -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file;
> do
> printf "%-10s%-4s|n" "${file:0:10}" " "
> done
./3.wav |
./1.wav |
./2.wav |
./.swp |
./input.tx |
Note that find
is recursive, so it works on sub-directories as well. If you want to avoid that, use -maxdepth 1
option.
Note that find
also has its own -printf
option, which may be more efficient to have everything done via one process than two ( that's find
plus the subshell in which while
runs ):
$ find /bin -type f -printf "%-15f|n" 2>/dev/null | head -n 5
hostname |
nc.traditional |
fusermount |
loadkeys |
zless |
Ideally what I'd suggest is write everything to temporary file, figure out the longest line ( aka longest filename in the file ) and pad however many spaces you want to there accordingly.
I ran it but... I want to print is./3.wav | ./1.wav | ./2.wav |
I don't want to include ./randomfi.
– SeHoon
Jun 8 '17 at 14:32
OK I'll fix that in a minute. Hold on
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:37
@최세훈 If the answer solved your question, can you please mark my answer as accepted by checking the gray checkmark on the side.
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:51
add a comment |
The main reason is because your echo command takes x number of characters from variable and pads 14 spaces. That means total number of chars in output string space won't be consistent.
Instead , you might want to use printf
with width specifier %-10s
for left padding like this:
bash-4.3$ for i in "${a[@]}"; do printf "%-10s%-4s|n" "${i:0:10}" " "; done
1.wav |
2.wav |
3.wav |
input.txt |
This way whatever variable you have will be made to fit within 10 characters,and to those 10 characters we pad 4. -
sign makes each string left justified.
Number -10
in %-10s
should remain the same to ensure that even if the file is shorter than 10 characters, we still get a 10 character string with spaces padded. But %-4s
part can be varied. For instance in the example above, %-4s
will have 4 spaces there, but if we want to have 14 spaces, then use %-14s
.
Note that it's generally recommended against of parsing output of ls, which is exactly what you're doing. As alternative, we can use find
command with while IFS= read -r -d ''
structure like this:
bash-4.3$ find -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file;
> do
> printf "%-10s%-4s|n" "${file:0:10}" " "
> done
./3.wav |
./1.wav |
./2.wav |
./.swp |
./input.tx |
Note that find
is recursive, so it works on sub-directories as well. If you want to avoid that, use -maxdepth 1
option.
Note that find
also has its own -printf
option, which may be more efficient to have everything done via one process than two ( that's find
plus the subshell in which while
runs ):
$ find /bin -type f -printf "%-15f|n" 2>/dev/null | head -n 5
hostname |
nc.traditional |
fusermount |
loadkeys |
zless |
Ideally what I'd suggest is write everything to temporary file, figure out the longest line ( aka longest filename in the file ) and pad however many spaces you want to there accordingly.
I ran it but... I want to print is./3.wav | ./1.wav | ./2.wav |
I don't want to include ./randomfi.
– SeHoon
Jun 8 '17 at 14:32
OK I'll fix that in a minute. Hold on
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:37
@최세훈 If the answer solved your question, can you please mark my answer as accepted by checking the gray checkmark on the side.
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:51
add a comment |
The main reason is because your echo command takes x number of characters from variable and pads 14 spaces. That means total number of chars in output string space won't be consistent.
Instead , you might want to use printf
with width specifier %-10s
for left padding like this:
bash-4.3$ for i in "${a[@]}"; do printf "%-10s%-4s|n" "${i:0:10}" " "; done
1.wav |
2.wav |
3.wav |
input.txt |
This way whatever variable you have will be made to fit within 10 characters,and to those 10 characters we pad 4. -
sign makes each string left justified.
Number -10
in %-10s
should remain the same to ensure that even if the file is shorter than 10 characters, we still get a 10 character string with spaces padded. But %-4s
part can be varied. For instance in the example above, %-4s
will have 4 spaces there, but if we want to have 14 spaces, then use %-14s
.
Note that it's generally recommended against of parsing output of ls, which is exactly what you're doing. As alternative, we can use find
command with while IFS= read -r -d ''
structure like this:
bash-4.3$ find -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file;
> do
> printf "%-10s%-4s|n" "${file:0:10}" " "
> done
./3.wav |
./1.wav |
./2.wav |
./.swp |
./input.tx |
Note that find
is recursive, so it works on sub-directories as well. If you want to avoid that, use -maxdepth 1
option.
Note that find
also has its own -printf
option, which may be more efficient to have everything done via one process than two ( that's find
plus the subshell in which while
runs ):
$ find /bin -type f -printf "%-15f|n" 2>/dev/null | head -n 5
hostname |
nc.traditional |
fusermount |
loadkeys |
zless |
Ideally what I'd suggest is write everything to temporary file, figure out the longest line ( aka longest filename in the file ) and pad however many spaces you want to there accordingly.
The main reason is because your echo command takes x number of characters from variable and pads 14 spaces. That means total number of chars in output string space won't be consistent.
Instead , you might want to use printf
with width specifier %-10s
for left padding like this:
bash-4.3$ for i in "${a[@]}"; do printf "%-10s%-4s|n" "${i:0:10}" " "; done
1.wav |
2.wav |
3.wav |
input.txt |
This way whatever variable you have will be made to fit within 10 characters,and to those 10 characters we pad 4. -
sign makes each string left justified.
Number -10
in %-10s
should remain the same to ensure that even if the file is shorter than 10 characters, we still get a 10 character string with spaces padded. But %-4s
part can be varied. For instance in the example above, %-4s
will have 4 spaces there, but if we want to have 14 spaces, then use %-14s
.
Note that it's generally recommended against of parsing output of ls, which is exactly what you're doing. As alternative, we can use find
command with while IFS= read -r -d ''
structure like this:
bash-4.3$ find -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file;
> do
> printf "%-10s%-4s|n" "${file:0:10}" " "
> done
./3.wav |
./1.wav |
./2.wav |
./.swp |
./input.tx |
Note that find
is recursive, so it works on sub-directories as well. If you want to avoid that, use -maxdepth 1
option.
Note that find
also has its own -printf
option, which may be more efficient to have everything done via one process than two ( that's find
plus the subshell in which while
runs ):
$ find /bin -type f -printf "%-15f|n" 2>/dev/null | head -n 5
hostname |
nc.traditional |
fusermount |
loadkeys |
zless |
Ideally what I'd suggest is write everything to temporary file, figure out the longest line ( aka longest filename in the file ) and pad however many spaces you want to there accordingly.
edited Dec 31 '18 at 8:06
answered Jun 8 '17 at 14:00
Sergiy KolodyazhnyySergiy Kolodyazhnyy
70.6k9147310
70.6k9147310
I ran it but... I want to print is./3.wav | ./1.wav | ./2.wav |
I don't want to include ./randomfi.
– SeHoon
Jun 8 '17 at 14:32
OK I'll fix that in a minute. Hold on
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:37
@최세훈 If the answer solved your question, can you please mark my answer as accepted by checking the gray checkmark on the side.
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:51
add a comment |
I ran it but... I want to print is./3.wav | ./1.wav | ./2.wav |
I don't want to include ./randomfi.
– SeHoon
Jun 8 '17 at 14:32
OK I'll fix that in a minute. Hold on
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:37
@최세훈 If the answer solved your question, can you please mark my answer as accepted by checking the gray checkmark on the side.
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:51
I ran it but... I want to print is
./3.wav | ./1.wav | ./2.wav |
I don't want to include ./randomfi.– SeHoon
Jun 8 '17 at 14:32
I ran it but... I want to print is
./3.wav | ./1.wav | ./2.wav |
I don't want to include ./randomfi.– SeHoon
Jun 8 '17 at 14:32
OK I'll fix that in a minute. Hold on
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:37
OK I'll fix that in a minute. Hold on
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:37
@최세훈 If the answer solved your question, can you please mark my answer as accepted by checking the gray checkmark on the side.
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:51
@최세훈 If the answer solved your question, can you please mark my answer as accepted by checking the gray checkmark on the side.
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:51
add a comment |
Thanks for contributing an answer to Ask Ubuntu!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f923396%2fhow-to-format-output-of-script-to-have-equal-number-of-spaces%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
Can you post the code instead of posting its picture?
– choroba
Jun 8 '17 at 13:36
3
Please drop the pictures showing text, replacing them with actual text, then clarify what you want to achieve. Actually at the moment there is no question mark in the entire post.
– Andrea Lazzarotto
Jun 8 '17 at 14:03
1
Fixed the formatting guys :)
– Sergiy Kolodyazhnyy
Jun 8 '17 at 14:24