group lines according to first word
How can I modify the following content of a file:
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
To :
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
It's not specific to dog or cat, it's more of symbolic representation of whatever the first word/term is
text-processing awk sed grep
|
show 2 more comments
How can I modify the following content of a file:
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
To :
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
It's not specific to dog or cat, it's more of symbolic representation of whatever the first word/term is
text-processing awk sed grep
Will the first word always be delimited by a colon?
– Jesse_b
Jan 25 at 14:30
Yes it'll always be in cat: or dog: format but a solution to something without being delimited by a colon is also welcomed @Jesse_b
– user607694
Jan 25 at 14:33
Please clarify whether the blank line in the output is required or cosmetic.
– agc
Jan 25 at 14:55
@agc: The blank line is really the only change between input and desired output.
– Jesse_b
Jan 25 at 15:21
1
uniq
can do it, but you have to hardcode the width of the first field, which makes it frustratingly useless:uniq --group -w 4 file
– glenn jackman
Jan 25 at 16:30
|
show 2 more comments
How can I modify the following content of a file:
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
To :
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
It's not specific to dog or cat, it's more of symbolic representation of whatever the first word/term is
text-processing awk sed grep
How can I modify the following content of a file:
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
To :
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
It's not specific to dog or cat, it's more of symbolic representation of whatever the first word/term is
text-processing awk sed grep
text-processing awk sed grep
edited Jan 25 at 16:18
steve
14.1k22552
14.1k22552
asked Jan 25 at 14:27
user607694user607694
504
504
Will the first word always be delimited by a colon?
– Jesse_b
Jan 25 at 14:30
Yes it'll always be in cat: or dog: format but a solution to something without being delimited by a colon is also welcomed @Jesse_b
– user607694
Jan 25 at 14:33
Please clarify whether the blank line in the output is required or cosmetic.
– agc
Jan 25 at 14:55
@agc: The blank line is really the only change between input and desired output.
– Jesse_b
Jan 25 at 15:21
1
uniq
can do it, but you have to hardcode the width of the first field, which makes it frustratingly useless:uniq --group -w 4 file
– glenn jackman
Jan 25 at 16:30
|
show 2 more comments
Will the first word always be delimited by a colon?
– Jesse_b
Jan 25 at 14:30
Yes it'll always be in cat: or dog: format but a solution to something without being delimited by a colon is also welcomed @Jesse_b
– user607694
Jan 25 at 14:33
Please clarify whether the blank line in the output is required or cosmetic.
– agc
Jan 25 at 14:55
@agc: The blank line is really the only change between input and desired output.
– Jesse_b
Jan 25 at 15:21
1
uniq
can do it, but you have to hardcode the width of the first field, which makes it frustratingly useless:uniq --group -w 4 file
– glenn jackman
Jan 25 at 16:30
Will the first word always be delimited by a colon?
– Jesse_b
Jan 25 at 14:30
Will the first word always be delimited by a colon?
– Jesse_b
Jan 25 at 14:30
Yes it'll always be in cat: or dog: format but a solution to something without being delimited by a colon is also welcomed @Jesse_b
– user607694
Jan 25 at 14:33
Yes it'll always be in cat: or dog: format but a solution to something without being delimited by a colon is also welcomed @Jesse_b
– user607694
Jan 25 at 14:33
Please clarify whether the blank line in the output is required or cosmetic.
– agc
Jan 25 at 14:55
Please clarify whether the blank line in the output is required or cosmetic.
– agc
Jan 25 at 14:55
@agc: The blank line is really the only change between input and desired output.
– Jesse_b
Jan 25 at 15:21
@agc: The blank line is really the only change between input and desired output.
– Jesse_b
Jan 25 at 15:21
1
1
uniq
can do it, but you have to hardcode the width of the first field, which makes it frustratingly useless: uniq --group -w 4 file
– glenn jackman
Jan 25 at 16:30
uniq
can do it, but you have to hardcode the width of the first field, which makes it frustratingly useless: uniq --group -w 4 file
– glenn jackman
Jan 25 at 16:30
|
show 2 more comments
5 Answers
5
active
oldest
votes
You could do something like:
awk -F: 'NR>1 && $1 "" != last {print ""}; {print; last = $1}'
The ""
is to force string comparison. Without it, it wouldn't work properly in input like:
100:foo
100:bar
1e2:baz
1e2:biz
Where 100
and 1e2
would be compared as numbers.
add a comment |
Here's one way. If the first field isn't the same as the one in the previous line, print a break....
$ awk -F: '$1!=a&&a{print ""}{a=$1}1' myfile
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
$
Explanation:
-F:
= set the field delimiter to:
$1!=a&&a
= if first field is not equal to variable "a" (the previous first field), and variable "a" is set to something (i.e. we're not dealing with the very first line in the file)
{print ""}
= print a blank line
{a=$1}
= for every line read, set variable "a" to the first field
1
= print the line
and variable "a" is set to something is actually "a" is set no a non-empty string that is none of the representations of the zero number (like "0", "0e2", " 0 ", 1e-500... possibly 0x0, 0x0p4... with some implementations)
– Stéphane Chazelas
Jan 25 at 17:00
add a comment |
I tried with this way
en ~]# awk '/cat/{print $0}' filename| sed '$s/.*/&n/g';awk '/dog/{print $0}' filename
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
[root@praveen ~]#
needs a tweak to avoid that first blank line of output, in order to match the desired reult ?
– steve
Jan 25 at 16:09
@steve: That's easy, just pipe it throughtail -n +2
. Nobody said you have to do everything inawk
.
– Kevin
Jan 26 at 2:32
add a comment |
You could employ the sed
editor for this job too:
$ sed -e '
$q;N
P
/^([^:]*):.*n1:/!{x;p;x;}
D
' input
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
Basic idea is to have 2 lines at any time in the pattern space. Compare the strings before the leading colons ":" in the pattern space. Should they not match, means a
changeover of an animal is detected, and we promptly display an empty line.
add a comment |
It could be done with awk:
awk -F: ' $0!="" && last!="" && $1!=last"" {print""} {last=$1} 1'
-F :
used to split the fields on a:
character.$0 != ""
is required to avoid converting one empty line into three.
This allows re-processing an already processed file without adding empty lines.last != ""
is required to avoid the file first line (where last is empty).
$1 != last""
compare the present first field to the previous one.
The trailing""
ensure that the comparison is done in text mode. Otherwise, equivalent (toawk
) numeric values will be seen as equal, like:
7:first line
7e0:second line
7.0000:third line
7.000000000000000000008:fourth line
{print""}
print an empty line (if all the tests above match).{last=$1}
store the line first field in the variablelast
.1
print the line contents (always).
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%2f496684%2fgroup-lines-according-to-first-word%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
You could do something like:
awk -F: 'NR>1 && $1 "" != last {print ""}; {print; last = $1}'
The ""
is to force string comparison. Without it, it wouldn't work properly in input like:
100:foo
100:bar
1e2:baz
1e2:biz
Where 100
and 1e2
would be compared as numbers.
add a comment |
You could do something like:
awk -F: 'NR>1 && $1 "" != last {print ""}; {print; last = $1}'
The ""
is to force string comparison. Without it, it wouldn't work properly in input like:
100:foo
100:bar
1e2:baz
1e2:biz
Where 100
and 1e2
would be compared as numbers.
add a comment |
You could do something like:
awk -F: 'NR>1 && $1 "" != last {print ""}; {print; last = $1}'
The ""
is to force string comparison. Without it, it wouldn't work properly in input like:
100:foo
100:bar
1e2:baz
1e2:biz
Where 100
and 1e2
would be compared as numbers.
You could do something like:
awk -F: 'NR>1 && $1 "" != last {print ""}; {print; last = $1}'
The ""
is to force string comparison. Without it, it wouldn't work properly in input like:
100:foo
100:bar
1e2:baz
1e2:biz
Where 100
and 1e2
would be compared as numbers.
answered Jan 25 at 14:43
Stéphane ChazelasStéphane Chazelas
309k57583945
309k57583945
add a comment |
add a comment |
Here's one way. If the first field isn't the same as the one in the previous line, print a break....
$ awk -F: '$1!=a&&a{print ""}{a=$1}1' myfile
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
$
Explanation:
-F:
= set the field delimiter to:
$1!=a&&a
= if first field is not equal to variable "a" (the previous first field), and variable "a" is set to something (i.e. we're not dealing with the very first line in the file)
{print ""}
= print a blank line
{a=$1}
= for every line read, set variable "a" to the first field
1
= print the line
and variable "a" is set to something is actually "a" is set no a non-empty string that is none of the representations of the zero number (like "0", "0e2", " 0 ", 1e-500... possibly 0x0, 0x0p4... with some implementations)
– Stéphane Chazelas
Jan 25 at 17:00
add a comment |
Here's one way. If the first field isn't the same as the one in the previous line, print a break....
$ awk -F: '$1!=a&&a{print ""}{a=$1}1' myfile
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
$
Explanation:
-F:
= set the field delimiter to:
$1!=a&&a
= if first field is not equal to variable "a" (the previous first field), and variable "a" is set to something (i.e. we're not dealing with the very first line in the file)
{print ""}
= print a blank line
{a=$1}
= for every line read, set variable "a" to the first field
1
= print the line
and variable "a" is set to something is actually "a" is set no a non-empty string that is none of the representations of the zero number (like "0", "0e2", " 0 ", 1e-500... possibly 0x0, 0x0p4... with some implementations)
– Stéphane Chazelas
Jan 25 at 17:00
add a comment |
Here's one way. If the first field isn't the same as the one in the previous line, print a break....
$ awk -F: '$1!=a&&a{print ""}{a=$1}1' myfile
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
$
Explanation:
-F:
= set the field delimiter to:
$1!=a&&a
= if first field is not equal to variable "a" (the previous first field), and variable "a" is set to something (i.e. we're not dealing with the very first line in the file)
{print ""}
= print a blank line
{a=$1}
= for every line read, set variable "a" to the first field
1
= print the line
Here's one way. If the first field isn't the same as the one in the previous line, print a break....
$ awk -F: '$1!=a&&a{print ""}{a=$1}1' myfile
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
$
Explanation:
-F:
= set the field delimiter to:
$1!=a&&a
= if first field is not equal to variable "a" (the previous first field), and variable "a" is set to something (i.e. we're not dealing with the very first line in the file)
{print ""}
= print a blank line
{a=$1}
= for every line read, set variable "a" to the first field
1
= print the line
edited Jan 25 at 16:05
answered Jan 25 at 14:47
stevesteve
14.1k22552
14.1k22552
and variable "a" is set to something is actually "a" is set no a non-empty string that is none of the representations of the zero number (like "0", "0e2", " 0 ", 1e-500... possibly 0x0, 0x0p4... with some implementations)
– Stéphane Chazelas
Jan 25 at 17:00
add a comment |
and variable "a" is set to something is actually "a" is set no a non-empty string that is none of the representations of the zero number (like "0", "0e2", " 0 ", 1e-500... possibly 0x0, 0x0p4... with some implementations)
– Stéphane Chazelas
Jan 25 at 17:00
and variable "a" is set to something is actually "a" is set no a non-empty string that is none of the representations of the zero number (like "0", "0e2", " 0 ", 1e-500... possibly 0x0, 0x0p4... with some implementations)
– Stéphane Chazelas
Jan 25 at 17:00
and variable "a" is set to something is actually "a" is set no a non-empty string that is none of the representations of the zero number (like "0", "0e2", " 0 ", 1e-500... possibly 0x0, 0x0p4... with some implementations)
– Stéphane Chazelas
Jan 25 at 17:00
add a comment |
I tried with this way
en ~]# awk '/cat/{print $0}' filename| sed '$s/.*/&n/g';awk '/dog/{print $0}' filename
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
[root@praveen ~]#
needs a tweak to avoid that first blank line of output, in order to match the desired reult ?
– steve
Jan 25 at 16:09
@steve: That's easy, just pipe it throughtail -n +2
. Nobody said you have to do everything inawk
.
– Kevin
Jan 26 at 2:32
add a comment |
I tried with this way
en ~]# awk '/cat/{print $0}' filename| sed '$s/.*/&n/g';awk '/dog/{print $0}' filename
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
[root@praveen ~]#
needs a tweak to avoid that first blank line of output, in order to match the desired reult ?
– steve
Jan 25 at 16:09
@steve: That's easy, just pipe it throughtail -n +2
. Nobody said you have to do everything inawk
.
– Kevin
Jan 26 at 2:32
add a comment |
I tried with this way
en ~]# awk '/cat/{print $0}' filename| sed '$s/.*/&n/g';awk '/dog/{print $0}' filename
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
[root@praveen ~]#
I tried with this way
en ~]# awk '/cat/{print $0}' filename| sed '$s/.*/&n/g';awk '/dog/{print $0}' filename
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
[root@praveen ~]#
answered Jan 25 at 16:07
Praveen Kumar BSPraveen Kumar BS
1,5261311
1,5261311
needs a tweak to avoid that first blank line of output, in order to match the desired reult ?
– steve
Jan 25 at 16:09
@steve: That's easy, just pipe it throughtail -n +2
. Nobody said you have to do everything inawk
.
– Kevin
Jan 26 at 2:32
add a comment |
needs a tweak to avoid that first blank line of output, in order to match the desired reult ?
– steve
Jan 25 at 16:09
@steve: That's easy, just pipe it throughtail -n +2
. Nobody said you have to do everything inawk
.
– Kevin
Jan 26 at 2:32
needs a tweak to avoid that first blank line of output, in order to match the desired reult ?
– steve
Jan 25 at 16:09
needs a tweak to avoid that first blank line of output, in order to match the desired reult ?
– steve
Jan 25 at 16:09
@steve: That's easy, just pipe it through
tail -n +2
. Nobody said you have to do everything in awk
.– Kevin
Jan 26 at 2:32
@steve: That's easy, just pipe it through
tail -n +2
. Nobody said you have to do everything in awk
.– Kevin
Jan 26 at 2:32
add a comment |
You could employ the sed
editor for this job too:
$ sed -e '
$q;N
P
/^([^:]*):.*n1:/!{x;p;x;}
D
' input
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
Basic idea is to have 2 lines at any time in the pattern space. Compare the strings before the leading colons ":" in the pattern space. Should they not match, means a
changeover of an animal is detected, and we promptly display an empty line.
add a comment |
You could employ the sed
editor for this job too:
$ sed -e '
$q;N
P
/^([^:]*):.*n1:/!{x;p;x;}
D
' input
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
Basic idea is to have 2 lines at any time in the pattern space. Compare the strings before the leading colons ":" in the pattern space. Should they not match, means a
changeover of an animal is detected, and we promptly display an empty line.
add a comment |
You could employ the sed
editor for this job too:
$ sed -e '
$q;N
P
/^([^:]*):.*n1:/!{x;p;x;}
D
' input
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
Basic idea is to have 2 lines at any time in the pattern space. Compare the strings before the leading colons ":" in the pattern space. Should they not match, means a
changeover of an animal is detected, and we promptly display an empty line.
You could employ the sed
editor for this job too:
$ sed -e '
$q;N
P
/^([^:]*):.*n1:/!{x;p;x;}
D
' input
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
Basic idea is to have 2 lines at any time in the pattern space. Compare the strings before the leading colons ":" in the pattern space. Should they not match, means a
changeover of an animal is detected, and we promptly display an empty line.
answered Jan 26 at 11:01
Rakesh SharmaRakesh Sharma
582
582
add a comment |
add a comment |
It could be done with awk:
awk -F: ' $0!="" && last!="" && $1!=last"" {print""} {last=$1} 1'
-F :
used to split the fields on a:
character.$0 != ""
is required to avoid converting one empty line into three.
This allows re-processing an already processed file without adding empty lines.last != ""
is required to avoid the file first line (where last is empty).
$1 != last""
compare the present first field to the previous one.
The trailing""
ensure that the comparison is done in text mode. Otherwise, equivalent (toawk
) numeric values will be seen as equal, like:
7:first line
7e0:second line
7.0000:third line
7.000000000000000000008:fourth line
{print""}
print an empty line (if all the tests above match).{last=$1}
store the line first field in the variablelast
.1
print the line contents (always).
add a comment |
It could be done with awk:
awk -F: ' $0!="" && last!="" && $1!=last"" {print""} {last=$1} 1'
-F :
used to split the fields on a:
character.$0 != ""
is required to avoid converting one empty line into three.
This allows re-processing an already processed file without adding empty lines.last != ""
is required to avoid the file first line (where last is empty).
$1 != last""
compare the present first field to the previous one.
The trailing""
ensure that the comparison is done in text mode. Otherwise, equivalent (toawk
) numeric values will be seen as equal, like:
7:first line
7e0:second line
7.0000:third line
7.000000000000000000008:fourth line
{print""}
print an empty line (if all the tests above match).{last=$1}
store the line first field in the variablelast
.1
print the line contents (always).
add a comment |
It could be done with awk:
awk -F: ' $0!="" && last!="" && $1!=last"" {print""} {last=$1} 1'
-F :
used to split the fields on a:
character.$0 != ""
is required to avoid converting one empty line into three.
This allows re-processing an already processed file without adding empty lines.last != ""
is required to avoid the file first line (where last is empty).
$1 != last""
compare the present first field to the previous one.
The trailing""
ensure that the comparison is done in text mode. Otherwise, equivalent (toawk
) numeric values will be seen as equal, like:
7:first line
7e0:second line
7.0000:third line
7.000000000000000000008:fourth line
{print""}
print an empty line (if all the tests above match).{last=$1}
store the line first field in the variablelast
.1
print the line contents (always).
It could be done with awk:
awk -F: ' $0!="" && last!="" && $1!=last"" {print""} {last=$1} 1'
-F :
used to split the fields on a:
character.$0 != ""
is required to avoid converting one empty line into three.
This allows re-processing an already processed file without adding empty lines.last != ""
is required to avoid the file first line (where last is empty).
$1 != last""
compare the present first field to the previous one.
The trailing""
ensure that the comparison is done in text mode. Otherwise, equivalent (toawk
) numeric values will be seen as equal, like:
7:first line
7e0:second line
7.0000:third line
7.000000000000000000008:fourth line
{print""}
print an empty line (if all the tests above match).{last=$1}
store the line first field in the variablelast
.1
print the line contents (always).
answered Jan 25 at 18:31
IsaacIsaac
12k11852
12k11852
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.
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%2f496684%2fgroup-lines-according-to-first-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
Will the first word always be delimited by a colon?
– Jesse_b
Jan 25 at 14:30
Yes it'll always be in cat: or dog: format but a solution to something without being delimited by a colon is also welcomed @Jesse_b
– user607694
Jan 25 at 14:33
Please clarify whether the blank line in the output is required or cosmetic.
– agc
Jan 25 at 14:55
@agc: The blank line is really the only change between input and desired output.
– Jesse_b
Jan 25 at 15:21
1
uniq
can do it, but you have to hardcode the width of the first field, which makes it frustratingly useless:uniq --group -w 4 file
– glenn jackman
Jan 25 at 16:30