Sort File with word
Clash Royale CLAN TAG#URR8PPP
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I have a text file that looks something like this
Name1 OpenFin
Name2 Chrome
Name3 OpenFin
Name4 Chrome
Name5 OpenFin
Name6 OpenFin
I want to sort this is a way where all lines with OpenFin
appears first followed by all lines with Chrome
This is what I have so far:
grep OpenFin LoginExcInternal.txt | grep Chrome LoginExcInternal.txt > test.txt
linux text-processing sort
add a comment |
I have a text file that looks something like this
Name1 OpenFin
Name2 Chrome
Name3 OpenFin
Name4 Chrome
Name5 OpenFin
Name6 OpenFin
I want to sort this is a way where all lines with OpenFin
appears first followed by all lines with Chrome
This is what I have so far:
grep OpenFin LoginExcInternal.txt | grep Chrome LoginExcInternal.txt > test.txt
linux text-processing sort
4
sort -k2r LoginExternal.txt
– steeldriver
Mar 12 at 14:36
Genius! Can you explain how this works?
– Ibrahim A
Mar 12 at 14:38
I also need the names to stay in alphabetical order
– Ibrahim A
Mar 12 at 14:39
The names you have provided do stay in (lexical) order - if you have a more complex requirement, then please provide an example reflecting that. If you have GNUsort
then you can trysort --stable -k2r LoginExternal.txt
– steeldriver
Mar 12 at 14:50
add a comment |
I have a text file that looks something like this
Name1 OpenFin
Name2 Chrome
Name3 OpenFin
Name4 Chrome
Name5 OpenFin
Name6 OpenFin
I want to sort this is a way where all lines with OpenFin
appears first followed by all lines with Chrome
This is what I have so far:
grep OpenFin LoginExcInternal.txt | grep Chrome LoginExcInternal.txt > test.txt
linux text-processing sort
I have a text file that looks something like this
Name1 OpenFin
Name2 Chrome
Name3 OpenFin
Name4 Chrome
Name5 OpenFin
Name6 OpenFin
I want to sort this is a way where all lines with OpenFin
appears first followed by all lines with Chrome
This is what I have so far:
grep OpenFin LoginExcInternal.txt | grep Chrome LoginExcInternal.txt > test.txt
linux text-processing sort
linux text-processing sort
edited Mar 12 at 15:43
Jeff Schaller♦
44.9k1164147
44.9k1164147
asked Mar 12 at 14:32
Ibrahim AIbrahim A
419
419
4
sort -k2r LoginExternal.txt
– steeldriver
Mar 12 at 14:36
Genius! Can you explain how this works?
– Ibrahim A
Mar 12 at 14:38
I also need the names to stay in alphabetical order
– Ibrahim A
Mar 12 at 14:39
The names you have provided do stay in (lexical) order - if you have a more complex requirement, then please provide an example reflecting that. If you have GNUsort
then you can trysort --stable -k2r LoginExternal.txt
– steeldriver
Mar 12 at 14:50
add a comment |
4
sort -k2r LoginExternal.txt
– steeldriver
Mar 12 at 14:36
Genius! Can you explain how this works?
– Ibrahim A
Mar 12 at 14:38
I also need the names to stay in alphabetical order
– Ibrahim A
Mar 12 at 14:39
The names you have provided do stay in (lexical) order - if you have a more complex requirement, then please provide an example reflecting that. If you have GNUsort
then you can trysort --stable -k2r LoginExternal.txt
– steeldriver
Mar 12 at 14:50
4
4
sort -k2r LoginExternal.txt
– steeldriver
Mar 12 at 14:36
sort -k2r LoginExternal.txt
– steeldriver
Mar 12 at 14:36
Genius! Can you explain how this works?
– Ibrahim A
Mar 12 at 14:38
Genius! Can you explain how this works?
– Ibrahim A
Mar 12 at 14:38
I also need the names to stay in alphabetical order
– Ibrahim A
Mar 12 at 14:39
I also need the names to stay in alphabetical order
– Ibrahim A
Mar 12 at 14:39
The names you have provided do stay in (lexical) order - if you have a more complex requirement, then please provide an example reflecting that. If you have GNU
sort
then you can try sort --stable -k2r LoginExternal.txt
– steeldriver
Mar 12 at 14:50
The names you have provided do stay in (lexical) order - if you have a more complex requirement, then please provide an example reflecting that. If you have GNU
sort
then you can try sort --stable -k2r LoginExternal.txt
– steeldriver
Mar 12 at 14:50
add a comment |
3 Answers
3
active
oldest
votes
A direct translation of your requirement:
all lines with
OpenFin
appears first, followed by all lines withChrome
... without having to know which sorts first would be:
grep -F OpenFin LoginExcInternal.txt; grep -F Chrome LoginExcInternal.txt; > test.txt
This also keeps the lines in the order in which they appeared in the original file (without going through hoops to keep sort
from sorting on the whole line).
add a comment |
Your command
grep OpenFin LoginExcInternal.txt | grep Chrome LoginExcInternal.txt > test.txt
would only produce the lines from the original data that contains the string Chrome
anywhere on the line. This is because the result of the first grep
in the pipeline would not be handled at all by the right hand side of the pipeline (it would simply be discarded).
grep
will, when given a filename to read from, not process its standard input stream. It's on the standard input stream that the result of the first grep
arrives.
sort -k2r LoginExcInternal.txt >test.txt
You want the lines with Chrome
in their 2nd column to come after the lines containing OpenFin
in the same column. The above does that by means of sorting the original data on the second column in reverse lexicographical order.
The -k2r
flag to sort
tells the utility to sort the data on the second column (and onwards, if there were more than two columns), in reverse order (the r
). If two lines have the same value in the second column, then the whole line will be used as the sorting key.
Lines with any other values in the second column will be sorted with the rest of the lines and also be part of the output.
If you care about the original ordering of the data and don't want to change it, and assuming that you only want to extract the lines with these two values in the second column (and no other values) then do it in two steps:
awk -v value='OpenFin' '$2 == value' LoginExcInternal.txt >test.txt
awk -v value='Chrome' '$2 == value' LoginExcInternal.txt >>test.txt
This applies the same awk
code twice on the original data, with different values in the variable value
. The code does a string comparison in the second column (only) and prints the lines that have the specified value. The first run of the awk
script does the OpenFin
values, and the second adds the Chrome
lines to this.
This avoids involving the first column in the comparison of the data, which would be an issue if any of the first column's values happened to be Chrome
or OpenFin
. Also, since the awk
code uses string comparisons, it avoids outputting lines whose second column may contain one of the strings as substring.
add a comment |
This was answered by the user "emilrn" then removed for some reason. However, their response worked perfectly.
I was told to run both of these commands:
cat LoginExcInternal.txt | grep OpenFin >> test.txt
cat LoginExcInternal.txt | grep Chrome >> test.txt
Thank you emilrn!
unnecessarycat
.cat file | grep ...
is almost always unnecessary.
– Weijun Zhou
Mar 12 at 18:48
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%2f505891%2fsort-file-with-word%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
A direct translation of your requirement:
all lines with
OpenFin
appears first, followed by all lines withChrome
... without having to know which sorts first would be:
grep -F OpenFin LoginExcInternal.txt; grep -F Chrome LoginExcInternal.txt; > test.txt
This also keeps the lines in the order in which they appeared in the original file (without going through hoops to keep sort
from sorting on the whole line).
add a comment |
A direct translation of your requirement:
all lines with
OpenFin
appears first, followed by all lines withChrome
... without having to know which sorts first would be:
grep -F OpenFin LoginExcInternal.txt; grep -F Chrome LoginExcInternal.txt; > test.txt
This also keeps the lines in the order in which they appeared in the original file (without going through hoops to keep sort
from sorting on the whole line).
add a comment |
A direct translation of your requirement:
all lines with
OpenFin
appears first, followed by all lines withChrome
... without having to know which sorts first would be:
grep -F OpenFin LoginExcInternal.txt; grep -F Chrome LoginExcInternal.txt; > test.txt
This also keeps the lines in the order in which they appeared in the original file (without going through hoops to keep sort
from sorting on the whole line).
A direct translation of your requirement:
all lines with
OpenFin
appears first, followed by all lines withChrome
... without having to know which sorts first would be:
grep -F OpenFin LoginExcInternal.txt; grep -F Chrome LoginExcInternal.txt; > test.txt
This also keeps the lines in the order in which they appeared in the original file (without going through hoops to keep sort
from sorting on the whole line).
answered Mar 12 at 15:48
Jeff Schaller♦Jeff Schaller
44.9k1164147
44.9k1164147
add a comment |
add a comment |
Your command
grep OpenFin LoginExcInternal.txt | grep Chrome LoginExcInternal.txt > test.txt
would only produce the lines from the original data that contains the string Chrome
anywhere on the line. This is because the result of the first grep
in the pipeline would not be handled at all by the right hand side of the pipeline (it would simply be discarded).
grep
will, when given a filename to read from, not process its standard input stream. It's on the standard input stream that the result of the first grep
arrives.
sort -k2r LoginExcInternal.txt >test.txt
You want the lines with Chrome
in their 2nd column to come after the lines containing OpenFin
in the same column. The above does that by means of sorting the original data on the second column in reverse lexicographical order.
The -k2r
flag to sort
tells the utility to sort the data on the second column (and onwards, if there were more than two columns), in reverse order (the r
). If two lines have the same value in the second column, then the whole line will be used as the sorting key.
Lines with any other values in the second column will be sorted with the rest of the lines and also be part of the output.
If you care about the original ordering of the data and don't want to change it, and assuming that you only want to extract the lines with these two values in the second column (and no other values) then do it in two steps:
awk -v value='OpenFin' '$2 == value' LoginExcInternal.txt >test.txt
awk -v value='Chrome' '$2 == value' LoginExcInternal.txt >>test.txt
This applies the same awk
code twice on the original data, with different values in the variable value
. The code does a string comparison in the second column (only) and prints the lines that have the specified value. The first run of the awk
script does the OpenFin
values, and the second adds the Chrome
lines to this.
This avoids involving the first column in the comparison of the data, which would be an issue if any of the first column's values happened to be Chrome
or OpenFin
. Also, since the awk
code uses string comparisons, it avoids outputting lines whose second column may contain one of the strings as substring.
add a comment |
Your command
grep OpenFin LoginExcInternal.txt | grep Chrome LoginExcInternal.txt > test.txt
would only produce the lines from the original data that contains the string Chrome
anywhere on the line. This is because the result of the first grep
in the pipeline would not be handled at all by the right hand side of the pipeline (it would simply be discarded).
grep
will, when given a filename to read from, not process its standard input stream. It's on the standard input stream that the result of the first grep
arrives.
sort -k2r LoginExcInternal.txt >test.txt
You want the lines with Chrome
in their 2nd column to come after the lines containing OpenFin
in the same column. The above does that by means of sorting the original data on the second column in reverse lexicographical order.
The -k2r
flag to sort
tells the utility to sort the data on the second column (and onwards, if there were more than two columns), in reverse order (the r
). If two lines have the same value in the second column, then the whole line will be used as the sorting key.
Lines with any other values in the second column will be sorted with the rest of the lines and also be part of the output.
If you care about the original ordering of the data and don't want to change it, and assuming that you only want to extract the lines with these two values in the second column (and no other values) then do it in two steps:
awk -v value='OpenFin' '$2 == value' LoginExcInternal.txt >test.txt
awk -v value='Chrome' '$2 == value' LoginExcInternal.txt >>test.txt
This applies the same awk
code twice on the original data, with different values in the variable value
. The code does a string comparison in the second column (only) and prints the lines that have the specified value. The first run of the awk
script does the OpenFin
values, and the second adds the Chrome
lines to this.
This avoids involving the first column in the comparison of the data, which would be an issue if any of the first column's values happened to be Chrome
or OpenFin
. Also, since the awk
code uses string comparisons, it avoids outputting lines whose second column may contain one of the strings as substring.
add a comment |
Your command
grep OpenFin LoginExcInternal.txt | grep Chrome LoginExcInternal.txt > test.txt
would only produce the lines from the original data that contains the string Chrome
anywhere on the line. This is because the result of the first grep
in the pipeline would not be handled at all by the right hand side of the pipeline (it would simply be discarded).
grep
will, when given a filename to read from, not process its standard input stream. It's on the standard input stream that the result of the first grep
arrives.
sort -k2r LoginExcInternal.txt >test.txt
You want the lines with Chrome
in their 2nd column to come after the lines containing OpenFin
in the same column. The above does that by means of sorting the original data on the second column in reverse lexicographical order.
The -k2r
flag to sort
tells the utility to sort the data on the second column (and onwards, if there were more than two columns), in reverse order (the r
). If two lines have the same value in the second column, then the whole line will be used as the sorting key.
Lines with any other values in the second column will be sorted with the rest of the lines and also be part of the output.
If you care about the original ordering of the data and don't want to change it, and assuming that you only want to extract the lines with these two values in the second column (and no other values) then do it in two steps:
awk -v value='OpenFin' '$2 == value' LoginExcInternal.txt >test.txt
awk -v value='Chrome' '$2 == value' LoginExcInternal.txt >>test.txt
This applies the same awk
code twice on the original data, with different values in the variable value
. The code does a string comparison in the second column (only) and prints the lines that have the specified value. The first run of the awk
script does the OpenFin
values, and the second adds the Chrome
lines to this.
This avoids involving the first column in the comparison of the data, which would be an issue if any of the first column's values happened to be Chrome
or OpenFin
. Also, since the awk
code uses string comparisons, it avoids outputting lines whose second column may contain one of the strings as substring.
Your command
grep OpenFin LoginExcInternal.txt | grep Chrome LoginExcInternal.txt > test.txt
would only produce the lines from the original data that contains the string Chrome
anywhere on the line. This is because the result of the first grep
in the pipeline would not be handled at all by the right hand side of the pipeline (it would simply be discarded).
grep
will, when given a filename to read from, not process its standard input stream. It's on the standard input stream that the result of the first grep
arrives.
sort -k2r LoginExcInternal.txt >test.txt
You want the lines with Chrome
in their 2nd column to come after the lines containing OpenFin
in the same column. The above does that by means of sorting the original data on the second column in reverse lexicographical order.
The -k2r
flag to sort
tells the utility to sort the data on the second column (and onwards, if there were more than two columns), in reverse order (the r
). If two lines have the same value in the second column, then the whole line will be used as the sorting key.
Lines with any other values in the second column will be sorted with the rest of the lines and also be part of the output.
If you care about the original ordering of the data and don't want to change it, and assuming that you only want to extract the lines with these two values in the second column (and no other values) then do it in two steps:
awk -v value='OpenFin' '$2 == value' LoginExcInternal.txt >test.txt
awk -v value='Chrome' '$2 == value' LoginExcInternal.txt >>test.txt
This applies the same awk
code twice on the original data, with different values in the variable value
. The code does a string comparison in the second column (only) and prints the lines that have the specified value. The first run of the awk
script does the OpenFin
values, and the second adds the Chrome
lines to this.
This avoids involving the first column in the comparison of the data, which would be an issue if any of the first column's values happened to be Chrome
or OpenFin
. Also, since the awk
code uses string comparisons, it avoids outputting lines whose second column may contain one of the strings as substring.
edited Mar 12 at 16:17
answered Mar 12 at 15:48
Kusalananda♦Kusalananda
141k17262438
141k17262438
add a comment |
add a comment |
This was answered by the user "emilrn" then removed for some reason. However, their response worked perfectly.
I was told to run both of these commands:
cat LoginExcInternal.txt | grep OpenFin >> test.txt
cat LoginExcInternal.txt | grep Chrome >> test.txt
Thank you emilrn!
unnecessarycat
.cat file | grep ...
is almost always unnecessary.
– Weijun Zhou
Mar 12 at 18:48
add a comment |
This was answered by the user "emilrn" then removed for some reason. However, their response worked perfectly.
I was told to run both of these commands:
cat LoginExcInternal.txt | grep OpenFin >> test.txt
cat LoginExcInternal.txt | grep Chrome >> test.txt
Thank you emilrn!
unnecessarycat
.cat file | grep ...
is almost always unnecessary.
– Weijun Zhou
Mar 12 at 18:48
add a comment |
This was answered by the user "emilrn" then removed for some reason. However, their response worked perfectly.
I was told to run both of these commands:
cat LoginExcInternal.txt | grep OpenFin >> test.txt
cat LoginExcInternal.txt | grep Chrome >> test.txt
Thank you emilrn!
This was answered by the user "emilrn" then removed for some reason. However, their response worked perfectly.
I was told to run both of these commands:
cat LoginExcInternal.txt | grep OpenFin >> test.txt
cat LoginExcInternal.txt | grep Chrome >> test.txt
Thank you emilrn!
answered Mar 12 at 15:08
Ibrahim AIbrahim A
419
419
unnecessarycat
.cat file | grep ...
is almost always unnecessary.
– Weijun Zhou
Mar 12 at 18:48
add a comment |
unnecessarycat
.cat file | grep ...
is almost always unnecessary.
– Weijun Zhou
Mar 12 at 18:48
unnecessary
cat
. cat file | grep ...
is almost always unnecessary.– Weijun Zhou
Mar 12 at 18:48
unnecessary
cat
. cat file | grep ...
is almost always unnecessary.– Weijun Zhou
Mar 12 at 18:48
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.
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%2f505891%2fsort-file-with-word%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
4
sort -k2r LoginExternal.txt
– steeldriver
Mar 12 at 14:36
Genius! Can you explain how this works?
– Ibrahim A
Mar 12 at 14:38
I also need the names to stay in alphabetical order
– Ibrahim A
Mar 12 at 14:39
The names you have provided do stay in (lexical) order - if you have a more complex requirement, then please provide an example reflecting that. If you have GNU
sort
then you can trysort --stable -k2r LoginExternal.txt
– steeldriver
Mar 12 at 14:50