xargs vertical alignment of output
I want to extract certain values from files in many subdirectories. I have a working code that does this:
for i in */; do grep "free energy" "$i"filename | tail -1 | xargs -I{} echo "$i: {}" >> output.txt; done
the tail -1
command gives me the last output from each file (which I want) and the xargs construction prepends the folder name so I know which line belongs to which system. The output.txt looks like this:
Cr/: free energy TOTEN = -18.87487583 eV
Hf/: free energy TOTEN = -18.76845679 eV
N/: free energy TOTEN = -15.90748159 eV
Nb/: free energy TOTEN = -20.38801759 eV
Ti/: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV
Where Cr
, Hf
, N
, TiN
and so on are the folder names. My problem is that the values on the right side are not aligned properly, because the folders have different character lengths. Changing the folder names is out of the question so I want the xargs command to always use a certain amount of spaces (like 10) - at least as a minimum - so the vertical alignment is proper. The result should look something like this:
Cr/ : free energy TOTEN = -18.87487583 eV
Hf/ : free energy TOTEN = -18.76845679 eV
N/ : free energy TOTEN = -15.90748159 eV
Nb/ : free energy TOTEN = -20.38801759 eV
Ti/ : free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV
or this
Cr /: free energy TOTEN = -18.87487583 eV
Hf /: free energy TOTEN = -18.76845679 eV
N /: free energy TOTEN = -15.90748159 eV
Nb /: free energy TOTEN = -20.38801759 eV
Ti /: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV
so that I can easily copy all the values at once with Alt
+ Leftclick
.
grep xargs
add a comment |
I want to extract certain values from files in many subdirectories. I have a working code that does this:
for i in */; do grep "free energy" "$i"filename | tail -1 | xargs -I{} echo "$i: {}" >> output.txt; done
the tail -1
command gives me the last output from each file (which I want) and the xargs construction prepends the folder name so I know which line belongs to which system. The output.txt looks like this:
Cr/: free energy TOTEN = -18.87487583 eV
Hf/: free energy TOTEN = -18.76845679 eV
N/: free energy TOTEN = -15.90748159 eV
Nb/: free energy TOTEN = -20.38801759 eV
Ti/: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV
Where Cr
, Hf
, N
, TiN
and so on are the folder names. My problem is that the values on the right side are not aligned properly, because the folders have different character lengths. Changing the folder names is out of the question so I want the xargs command to always use a certain amount of spaces (like 10) - at least as a minimum - so the vertical alignment is proper. The result should look something like this:
Cr/ : free energy TOTEN = -18.87487583 eV
Hf/ : free energy TOTEN = -18.76845679 eV
N/ : free energy TOTEN = -15.90748159 eV
Nb/ : free energy TOTEN = -20.38801759 eV
Ti/ : free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV
or this
Cr /: free energy TOTEN = -18.87487583 eV
Hf /: free energy TOTEN = -18.76845679 eV
N /: free energy TOTEN = -15.90748159 eV
Nb /: free energy TOTEN = -20.38801759 eV
Ti /: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV
so that I can easily copy all the values at once with Alt
+ Leftclick
.
grep xargs
1
Pipe through column command.
– Ipor Sircer
Dec 11 at 11:05
add a comment |
I want to extract certain values from files in many subdirectories. I have a working code that does this:
for i in */; do grep "free energy" "$i"filename | tail -1 | xargs -I{} echo "$i: {}" >> output.txt; done
the tail -1
command gives me the last output from each file (which I want) and the xargs construction prepends the folder name so I know which line belongs to which system. The output.txt looks like this:
Cr/: free energy TOTEN = -18.87487583 eV
Hf/: free energy TOTEN = -18.76845679 eV
N/: free energy TOTEN = -15.90748159 eV
Nb/: free energy TOTEN = -20.38801759 eV
Ti/: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV
Where Cr
, Hf
, N
, TiN
and so on are the folder names. My problem is that the values on the right side are not aligned properly, because the folders have different character lengths. Changing the folder names is out of the question so I want the xargs command to always use a certain amount of spaces (like 10) - at least as a minimum - so the vertical alignment is proper. The result should look something like this:
Cr/ : free energy TOTEN = -18.87487583 eV
Hf/ : free energy TOTEN = -18.76845679 eV
N/ : free energy TOTEN = -15.90748159 eV
Nb/ : free energy TOTEN = -20.38801759 eV
Ti/ : free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV
or this
Cr /: free energy TOTEN = -18.87487583 eV
Hf /: free energy TOTEN = -18.76845679 eV
N /: free energy TOTEN = -15.90748159 eV
Nb /: free energy TOTEN = -20.38801759 eV
Ti /: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV
so that I can easily copy all the values at once with Alt
+ Leftclick
.
grep xargs
I want to extract certain values from files in many subdirectories. I have a working code that does this:
for i in */; do grep "free energy" "$i"filename | tail -1 | xargs -I{} echo "$i: {}" >> output.txt; done
the tail -1
command gives me the last output from each file (which I want) and the xargs construction prepends the folder name so I know which line belongs to which system. The output.txt looks like this:
Cr/: free energy TOTEN = -18.87487583 eV
Hf/: free energy TOTEN = -18.76845679 eV
N/: free energy TOTEN = -15.90748159 eV
Nb/: free energy TOTEN = -20.38801759 eV
Ti/: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV
Where Cr
, Hf
, N
, TiN
and so on are the folder names. My problem is that the values on the right side are not aligned properly, because the folders have different character lengths. Changing the folder names is out of the question so I want the xargs command to always use a certain amount of spaces (like 10) - at least as a minimum - so the vertical alignment is proper. The result should look something like this:
Cr/ : free energy TOTEN = -18.87487583 eV
Hf/ : free energy TOTEN = -18.76845679 eV
N/ : free energy TOTEN = -15.90748159 eV
Nb/ : free energy TOTEN = -20.38801759 eV
Ti/ : free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV
or this
Cr /: free energy TOTEN = -18.87487583 eV
Hf /: free energy TOTEN = -18.76845679 eV
N /: free energy TOTEN = -15.90748159 eV
Nb /: free energy TOTEN = -20.38801759 eV
Ti /: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV
so that I can easily copy all the values at once with Alt
+ Leftclick
.
grep xargs
grep xargs
asked Dec 11 at 10:56
Andreas
253
253
1
Pipe through column command.
– Ipor Sircer
Dec 11 at 11:05
add a comment |
1
Pipe through column command.
– Ipor Sircer
Dec 11 at 11:05
1
1
Pipe through column command.
– Ipor Sircer
Dec 11 at 11:05
Pipe through column command.
– Ipor Sircer
Dec 11 at 11:05
add a comment |
1 Answer
1
active
oldest
votes
printf
is what you want
xargs -I{} printf "%-10s: %sn" "$i" "{}"
Note that this will use /usr/bin/printf, not the shell's builtin printf.
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
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: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
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%2funix.stackexchange.com%2fquestions%2f487312%2fxargs-vertical-alignment-of-output%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
printf
is what you want
xargs -I{} printf "%-10s: %sn" "$i" "{}"
Note that this will use /usr/bin/printf, not the shell's builtin printf.
add a comment |
printf
is what you want
xargs -I{} printf "%-10s: %sn" "$i" "{}"
Note that this will use /usr/bin/printf, not the shell's builtin printf.
add a comment |
printf
is what you want
xargs -I{} printf "%-10s: %sn" "$i" "{}"
Note that this will use /usr/bin/printf, not the shell's builtin printf.
printf
is what you want
xargs -I{} printf "%-10s: %sn" "$i" "{}"
Note that this will use /usr/bin/printf, not the shell's builtin printf.
answered Dec 11 at 18:24
glenn jackman
50.1k569106
50.1k569106
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- 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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2funix.stackexchange.com%2fquestions%2f487312%2fxargs-vertical-alignment-of-output%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
1
Pipe through column command.
– Ipor Sircer
Dec 11 at 11:05