Aliased pipeline using head and cutHow to use ' in alias?Bash newline doesn't printTail multiple files and...
STM32 PWM problem
Are there any spells or magic items that allow for making of ‘logic gates or wires’?
What is the reason behind this musical reference to Pinocchio in the Close Encounters main theme?
How do I add a strong "onion flavor" to the biryani (in restaurant style)?
Multiple null checks in Java 8
What is formjacking?
Is it common to refer to someone as "Prof. Dr. [LastName]"?
Can I combine Divination spells with Arcane Eye?
Was the Soviet N1 really capable of sending 9.6 GB/s of telemetry?
Why is quixotic not Quixotic (a proper adjective)?
How bad is a Computer Science course that doesn't teach Design Patterns?
Are encryption algorithms with fixed-point free permutations inherently flawed?
How do I handle a blinded enemy which wants to attack someone it's sure is there?
When distributing a Linux kernel driver as source code, what's the difference between Proprietary and GPL license?
Translation for threshold (figuratively)
Can you wish for more wishes from an Efreeti bound to service via an Efreeti Bottle?
How do I avoid the "chosen hero" feeling?
How do I write a maintainable, fast, compile-time bit-mask in C++?
Does the Resurrection spell consume material components if the target isn’t willing to be resurrected?
Boss asked me to sign a resignation paper without a date on it along with my new contract
Are all power cords made equal?
Why Is Image Exporting At Larger Dimensions Than In Illustrator File?
What does "don't have a baby" imply or mean in this sentence?
How can a kingdom keep the secret of a missing monarch from the public?
Aliased pipeline using head and cut
How to use ' in alias?Bash newline doesn't printTail multiple files and output as additional column with 'find' resultsHow to document my custom bash functions and aliases?aliasing a slightly complex script on Linux/bashHow to escape single quotes correctly creating an aliasWhy doesn't this tee with process substitution produce the 1st and chosen lines?zsh alias with linefeeds, commas and quotesUsing a bash alias or function with environment variables on multiple linesSwapping STD{OUT,ERR} in a pipeline multiple times
I'd like to create an alias to have a quick view of the table format files with comma separator:
alias thead='head | cut -d, -f1- | column -s, -t'
Later using it like this
thead file.csv
However, it doesn't work. What would be the correct syntax?
bash alias
New contributor
add a comment |
I'd like to create an alias to have a quick view of the table format files with comma separator:
alias thead='head | cut -d, -f1- | column -s, -t'
Later using it like this
thead file.csv
However, it doesn't work. What would be the correct syntax?
bash alias
New contributor
add a comment |
I'd like to create an alias to have a quick view of the table format files with comma separator:
alias thead='head | cut -d, -f1- | column -s, -t'
Later using it like this
thead file.csv
However, it doesn't work. What would be the correct syntax?
bash alias
New contributor
I'd like to create an alias to have a quick view of the table format files with comma separator:
alias thead='head | cut -d, -f1- | column -s, -t'
Later using it like this
thead file.csv
However, it doesn't work. What would be the correct syntax?
bash alias
bash alias
New contributor
New contributor
edited 1 hour ago
Kusalananda
131k17250409
131k17250409
New contributor
asked 2 hours ago
Max LiMax Li
1234
1234
New contributor
New contributor
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
For anything more advanced than a simple command, use a shell function instead of an alias:
thead () {
head "$1" | cut -d, -f1- | column -s, -t
}
This shell function would run head
on its first argument, and then send the result through the pipeline (although, since the cut
gets all columns due to -f 1-
, this part can probably be removed; I'm leaving it in here as you had it in your original pipeline).
Or,
thead () {
head "$2" | cut -d "$1" -f1- | column -s "$1" -t
}
... to be able to use it as
thead ',' filename
Or even, to allow for an optional delimiter (and use comma if none is given),
thead () {
local delim=','
if [ "$#" -gt 1 ]; then
delim=$1
shift
fi
head "$1" | cut -d "$delim" -f1- | column -s "$delim" -t
}
The function definition above could be placed wherever you usually define aliases.
The issue with having a pipeline in an alias is that when you use the alias with an argument, this argument would be added to the end of the pipeline, not after the first command in the pipeline.
The bash
manual contains the sentence
For almost every purpose, aliases are superseded by shell functions.
that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?
– Max Li
2 hours ago
@MaxLi See updated answer.
– Kusalananda
2 hours ago
@MaxLi I noticed that the delimiter was also present in thecolumn
command and that yourcut
command is a no-op. I fixed delimiter forcolumn
and added a note about thecut
.
– Kusalananda
32 mins ago
add a comment |
alias
expansion is just text substitution which is parsed again by the shell, so when you do:
thead file.csv
That's just replaced with:
head | cut -d, -f1- | column -s, -t file.csv
and interpreted again.
If you had written:
<file.csv thead
or
cat file.csv | thead
or
{ thead; } < file.csv
It would have worked as it would have been replaced with:
<file.csv head | cut -d, -f1- | column -s, -t
cat file.csv | head | cut -d, -f1- | column -s, -t
{ head | cut -d, -f1- | column -s, -t; } < file.csv
respectively. In any case, as @Kusalananda says, it's much better to use functions or scripts than aliases for that. Here, I'd just do:
thead() { head "$@" | cut -d, -f1- | column -s, -t; }
So you can do thead -n 12 file.csv file2.csv
for instance.
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
});
}
});
Max Li is a new contributor. Be nice, and check out our Code of Conduct.
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%2f502125%2faliased-pipeline-using-head-and-cut%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
For anything more advanced than a simple command, use a shell function instead of an alias:
thead () {
head "$1" | cut -d, -f1- | column -s, -t
}
This shell function would run head
on its first argument, and then send the result through the pipeline (although, since the cut
gets all columns due to -f 1-
, this part can probably be removed; I'm leaving it in here as you had it in your original pipeline).
Or,
thead () {
head "$2" | cut -d "$1" -f1- | column -s "$1" -t
}
... to be able to use it as
thead ',' filename
Or even, to allow for an optional delimiter (and use comma if none is given),
thead () {
local delim=','
if [ "$#" -gt 1 ]; then
delim=$1
shift
fi
head "$1" | cut -d "$delim" -f1- | column -s "$delim" -t
}
The function definition above could be placed wherever you usually define aliases.
The issue with having a pipeline in an alias is that when you use the alias with an argument, this argument would be added to the end of the pipeline, not after the first command in the pipeline.
The bash
manual contains the sentence
For almost every purpose, aliases are superseded by shell functions.
that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?
– Max Li
2 hours ago
@MaxLi See updated answer.
– Kusalananda
2 hours ago
@MaxLi I noticed that the delimiter was also present in thecolumn
command and that yourcut
command is a no-op. I fixed delimiter forcolumn
and added a note about thecut
.
– Kusalananda
32 mins ago
add a comment |
For anything more advanced than a simple command, use a shell function instead of an alias:
thead () {
head "$1" | cut -d, -f1- | column -s, -t
}
This shell function would run head
on its first argument, and then send the result through the pipeline (although, since the cut
gets all columns due to -f 1-
, this part can probably be removed; I'm leaving it in here as you had it in your original pipeline).
Or,
thead () {
head "$2" | cut -d "$1" -f1- | column -s "$1" -t
}
... to be able to use it as
thead ',' filename
Or even, to allow for an optional delimiter (and use comma if none is given),
thead () {
local delim=','
if [ "$#" -gt 1 ]; then
delim=$1
shift
fi
head "$1" | cut -d "$delim" -f1- | column -s "$delim" -t
}
The function definition above could be placed wherever you usually define aliases.
The issue with having a pipeline in an alias is that when you use the alias with an argument, this argument would be added to the end of the pipeline, not after the first command in the pipeline.
The bash
manual contains the sentence
For almost every purpose, aliases are superseded by shell functions.
that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?
– Max Li
2 hours ago
@MaxLi See updated answer.
– Kusalananda
2 hours ago
@MaxLi I noticed that the delimiter was also present in thecolumn
command and that yourcut
command is a no-op. I fixed delimiter forcolumn
and added a note about thecut
.
– Kusalananda
32 mins ago
add a comment |
For anything more advanced than a simple command, use a shell function instead of an alias:
thead () {
head "$1" | cut -d, -f1- | column -s, -t
}
This shell function would run head
on its first argument, and then send the result through the pipeline (although, since the cut
gets all columns due to -f 1-
, this part can probably be removed; I'm leaving it in here as you had it in your original pipeline).
Or,
thead () {
head "$2" | cut -d "$1" -f1- | column -s "$1" -t
}
... to be able to use it as
thead ',' filename
Or even, to allow for an optional delimiter (and use comma if none is given),
thead () {
local delim=','
if [ "$#" -gt 1 ]; then
delim=$1
shift
fi
head "$1" | cut -d "$delim" -f1- | column -s "$delim" -t
}
The function definition above could be placed wherever you usually define aliases.
The issue with having a pipeline in an alias is that when you use the alias with an argument, this argument would be added to the end of the pipeline, not after the first command in the pipeline.
The bash
manual contains the sentence
For almost every purpose, aliases are superseded by shell functions.
For anything more advanced than a simple command, use a shell function instead of an alias:
thead () {
head "$1" | cut -d, -f1- | column -s, -t
}
This shell function would run head
on its first argument, and then send the result through the pipeline (although, since the cut
gets all columns due to -f 1-
, this part can probably be removed; I'm leaving it in here as you had it in your original pipeline).
Or,
thead () {
head "$2" | cut -d "$1" -f1- | column -s "$1" -t
}
... to be able to use it as
thead ',' filename
Or even, to allow for an optional delimiter (and use comma if none is given),
thead () {
local delim=','
if [ "$#" -gt 1 ]; then
delim=$1
shift
fi
head "$1" | cut -d "$delim" -f1- | column -s "$delim" -t
}
The function definition above could be placed wherever you usually define aliases.
The issue with having a pipeline in an alias is that when you use the alias with an argument, this argument would be added to the end of the pipeline, not after the first command in the pipeline.
The bash
manual contains the sentence
For almost every purpose, aliases are superseded by shell functions.
edited 36 mins ago
answered 2 hours ago
KusalanandaKusalananda
131k17250409
131k17250409
that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?
– Max Li
2 hours ago
@MaxLi See updated answer.
– Kusalananda
2 hours ago
@MaxLi I noticed that the delimiter was also present in thecolumn
command and that yourcut
command is a no-op. I fixed delimiter forcolumn
and added a note about thecut
.
– Kusalananda
32 mins ago
add a comment |
that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?
– Max Li
2 hours ago
@MaxLi See updated answer.
– Kusalananda
2 hours ago
@MaxLi I noticed that the delimiter was also present in thecolumn
command and that yourcut
command is a no-op. I fixed delimiter forcolumn
and added a note about thecut
.
– Kusalananda
32 mins ago
that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?
– Max Li
2 hours ago
that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?
– Max Li
2 hours ago
@MaxLi See updated answer.
– Kusalananda
2 hours ago
@MaxLi See updated answer.
– Kusalananda
2 hours ago
@MaxLi I noticed that the delimiter was also present in the
column
command and that your cut
command is a no-op. I fixed delimiter for column
and added a note about the cut
.– Kusalananda
32 mins ago
@MaxLi I noticed that the delimiter was also present in the
column
command and that your cut
command is a no-op. I fixed delimiter for column
and added a note about the cut
.– Kusalananda
32 mins ago
add a comment |
alias
expansion is just text substitution which is parsed again by the shell, so when you do:
thead file.csv
That's just replaced with:
head | cut -d, -f1- | column -s, -t file.csv
and interpreted again.
If you had written:
<file.csv thead
or
cat file.csv | thead
or
{ thead; } < file.csv
It would have worked as it would have been replaced with:
<file.csv head | cut -d, -f1- | column -s, -t
cat file.csv | head | cut -d, -f1- | column -s, -t
{ head | cut -d, -f1- | column -s, -t; } < file.csv
respectively. In any case, as @Kusalananda says, it's much better to use functions or scripts than aliases for that. Here, I'd just do:
thead() { head "$@" | cut -d, -f1- | column -s, -t; }
So you can do thead -n 12 file.csv file2.csv
for instance.
add a comment |
alias
expansion is just text substitution which is parsed again by the shell, so when you do:
thead file.csv
That's just replaced with:
head | cut -d, -f1- | column -s, -t file.csv
and interpreted again.
If you had written:
<file.csv thead
or
cat file.csv | thead
or
{ thead; } < file.csv
It would have worked as it would have been replaced with:
<file.csv head | cut -d, -f1- | column -s, -t
cat file.csv | head | cut -d, -f1- | column -s, -t
{ head | cut -d, -f1- | column -s, -t; } < file.csv
respectively. In any case, as @Kusalananda says, it's much better to use functions or scripts than aliases for that. Here, I'd just do:
thead() { head "$@" | cut -d, -f1- | column -s, -t; }
So you can do thead -n 12 file.csv file2.csv
for instance.
add a comment |
alias
expansion is just text substitution which is parsed again by the shell, so when you do:
thead file.csv
That's just replaced with:
head | cut -d, -f1- | column -s, -t file.csv
and interpreted again.
If you had written:
<file.csv thead
or
cat file.csv | thead
or
{ thead; } < file.csv
It would have worked as it would have been replaced with:
<file.csv head | cut -d, -f1- | column -s, -t
cat file.csv | head | cut -d, -f1- | column -s, -t
{ head | cut -d, -f1- | column -s, -t; } < file.csv
respectively. In any case, as @Kusalananda says, it's much better to use functions or scripts than aliases for that. Here, I'd just do:
thead() { head "$@" | cut -d, -f1- | column -s, -t; }
So you can do thead -n 12 file.csv file2.csv
for instance.
alias
expansion is just text substitution which is parsed again by the shell, so when you do:
thead file.csv
That's just replaced with:
head | cut -d, -f1- | column -s, -t file.csv
and interpreted again.
If you had written:
<file.csv thead
or
cat file.csv | thead
or
{ thead; } < file.csv
It would have worked as it would have been replaced with:
<file.csv head | cut -d, -f1- | column -s, -t
cat file.csv | head | cut -d, -f1- | column -s, -t
{ head | cut -d, -f1- | column -s, -t; } < file.csv
respectively. In any case, as @Kusalananda says, it's much better to use functions or scripts than aliases for that. Here, I'd just do:
thead() { head "$@" | cut -d, -f1- | column -s, -t; }
So you can do thead -n 12 file.csv file2.csv
for instance.
answered 1 hour ago
Stéphane ChazelasStéphane Chazelas
306k57580935
306k57580935
add a comment |
add a comment |
Max Li is a new contributor. Be nice, and check out our Code of Conduct.
Max Li is a new contributor. Be nice, and check out our Code of Conduct.
Max Li is a new contributor. Be nice, and check out our Code of Conduct.
Max Li is a new contributor. Be nice, and check out our Code of Conduct.
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.
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%2f502125%2faliased-pipeline-using-head-and-cut%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