Select portions of one column and paste as new column
I have a file in the following format:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2
2 5
3 7
&
1 7
2 4
3 9
&
So the first column repeats itself, and the second column changes. They're separated by a "&" in the first column and an empty space in the second column. There might be 1000s of such sections. I'd like to cut the portion of the second column and paste it as a new column, so in this case:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2 7
2 5 4
3 7 9
Then I could graph all the columns more easily. I also don't care about the first lines, in case is easier to just remove them or leave them there, doesn't matter much.
text-processing awk
add a comment |
I have a file in the following format:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2
2 5
3 7
&
1 7
2 4
3 9
&
So the first column repeats itself, and the second column changes. They're separated by a "&" in the first column and an empty space in the second column. There might be 1000s of such sections. I'd like to cut the portion of the second column and paste it as a new column, so in this case:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2 7
2 5 4
3 7 9
Then I could graph all the columns more easily. I also don't care about the first lines, in case is easier to just remove them or leave them there, doesn't matter much.
text-processing awk
Would a 3rd section of two columns be handled in the same way, i.e. that the second column is added as a 4th new column?
– Kusalananda
Feb 16 at 20:19
Correct. If the output has n sections in 2 columns, I'd like to convert that into n columns.
– egil137
Feb 16 at 20:34
add a comment |
I have a file in the following format:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2
2 5
3 7
&
1 7
2 4
3 9
&
So the first column repeats itself, and the second column changes. They're separated by a "&" in the first column and an empty space in the second column. There might be 1000s of such sections. I'd like to cut the portion of the second column and paste it as a new column, so in this case:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2 7
2 5 4
3 7 9
Then I could graph all the columns more easily. I also don't care about the first lines, in case is easier to just remove them or leave them there, doesn't matter much.
text-processing awk
I have a file in the following format:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2
2 5
3 7
&
1 7
2 4
3 9
&
So the first column repeats itself, and the second column changes. They're separated by a "&" in the first column and an empty space in the second column. There might be 1000s of such sections. I'd like to cut the portion of the second column and paste it as a new column, so in this case:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2 7
2 5 4
3 7 9
Then I could graph all the columns more easily. I also don't care about the first lines, in case is easier to just remove them or leave them there, doesn't matter much.
text-processing awk
text-processing awk
edited Feb 17 at 7:22
Rui F Ribeiro
41k1479137
41k1479137
asked Feb 16 at 20:12
egil137egil137
132
132
Would a 3rd section of two columns be handled in the same way, i.e. that the second column is added as a 4th new column?
– Kusalananda
Feb 16 at 20:19
Correct. If the output has n sections in 2 columns, I'd like to convert that into n columns.
– egil137
Feb 16 at 20:34
add a comment |
Would a 3rd section of two columns be handled in the same way, i.e. that the second column is added as a 4th new column?
– Kusalananda
Feb 16 at 20:19
Correct. If the output has n sections in 2 columns, I'd like to convert that into n columns.
– egil137
Feb 16 at 20:34
Would a 3rd section of two columns be handled in the same way, i.e. that the second column is added as a 4th new column?
– Kusalananda
Feb 16 at 20:19
Would a 3rd section of two columns be handled in the same way, i.e. that the second column is added as a 4th new column?
– Kusalananda
Feb 16 at 20:19
Correct. If the output has n sections in 2 columns, I'd like to convert that into n columns.
– egil137
Feb 16 at 20:34
Correct. If the output has n sections in 2 columns, I'd like to convert that into n columns.
– egil137
Feb 16 at 20:34
add a comment |
1 Answer
1
active
oldest
votes
Run it:
cat << EOF | awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "t" $2 }
END { for (i in result) print result[i] }
'
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2
2 5
3 7
&
1 7
2 4
3 9
&
EOF
Or you can use the file filename with input data. In this case run:
awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "t" $2 }
END { for (i in result) print result[i] }
' filename
In both cases you'll get the result:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2 7
2 5 4
3 7 9
It will work with any number of columns.
1
it works, thank you! For some reason however the output is out of order, any way to fix this? It's not a big problem since I can fix it in my spreadsheet, but it would help with my worflow. If it matters the numbers in each column can be very large and not only single digits.
– egil137
Feb 18 at 15:13
@egil137, The easiest way to sort output is to add| sort -n
after awk execution. It will look' | sort -n
in the first example and' filename | sort -n
in the second one.
– Ivan Olshansky
Feb 18 at 18:42
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%2f501091%2fselect-portions-of-one-column-and-paste-as-new-column%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
Run it:
cat << EOF | awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "t" $2 }
END { for (i in result) print result[i] }
'
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2
2 5
3 7
&
1 7
2 4
3 9
&
EOF
Or you can use the file filename with input data. In this case run:
awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "t" $2 }
END { for (i in result) print result[i] }
' filename
In both cases you'll get the result:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2 7
2 5 4
3 7 9
It will work with any number of columns.
1
it works, thank you! For some reason however the output is out of order, any way to fix this? It's not a big problem since I can fix it in my spreadsheet, but it would help with my worflow. If it matters the numbers in each column can be very large and not only single digits.
– egil137
Feb 18 at 15:13
@egil137, The easiest way to sort output is to add| sort -n
after awk execution. It will look' | sort -n
in the first example and' filename | sort -n
in the second one.
– Ivan Olshansky
Feb 18 at 18:42
add a comment |
Run it:
cat << EOF | awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "t" $2 }
END { for (i in result) print result[i] }
'
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2
2 5
3 7
&
1 7
2 4
3 9
&
EOF
Or you can use the file filename with input data. In this case run:
awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "t" $2 }
END { for (i in result) print result[i] }
' filename
In both cases you'll get the result:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2 7
2 5 4
3 7 9
It will work with any number of columns.
1
it works, thank you! For some reason however the output is out of order, any way to fix this? It's not a big problem since I can fix it in my spreadsheet, but it would help with my worflow. If it matters the numbers in each column can be very large and not only single digits.
– egil137
Feb 18 at 15:13
@egil137, The easiest way to sort output is to add| sort -n
after awk execution. It will look' | sort -n
in the first example and' filename | sort -n
in the second one.
– Ivan Olshansky
Feb 18 at 18:42
add a comment |
Run it:
cat << EOF | awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "t" $2 }
END { for (i in result) print result[i] }
'
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2
2 5
3 7
&
1 7
2 4
3 9
&
EOF
Or you can use the file filename with input data. In this case run:
awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "t" $2 }
END { for (i in result) print result[i] }
' filename
In both cases you'll get the result:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2 7
2 5 4
3 7 9
It will work with any number of columns.
Run it:
cat << EOF | awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "t" $2 }
END { for (i in result) print result[i] }
'
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2
2 5
3 7
&
1 7
2 4
3 9
&
EOF
Or you can use the file filename with input data. In this case run:
awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "t" $2 }
END { for (i in result) print result[i] }
' filename
In both cases you'll get the result:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2 7
2 5 4
3 7 9
It will work with any number of columns.
edited Feb 17 at 8:08
answered Feb 17 at 1:42
Ivan OlshanskyIvan Olshansky
176116
176116
1
it works, thank you! For some reason however the output is out of order, any way to fix this? It's not a big problem since I can fix it in my spreadsheet, but it would help with my worflow. If it matters the numbers in each column can be very large and not only single digits.
– egil137
Feb 18 at 15:13
@egil137, The easiest way to sort output is to add| sort -n
after awk execution. It will look' | sort -n
in the first example and' filename | sort -n
in the second one.
– Ivan Olshansky
Feb 18 at 18:42
add a comment |
1
it works, thank you! For some reason however the output is out of order, any way to fix this? It's not a big problem since I can fix it in my spreadsheet, but it would help with my worflow. If it matters the numbers in each column can be very large and not only single digits.
– egil137
Feb 18 at 15:13
@egil137, The easiest way to sort output is to add| sort -n
after awk execution. It will look' | sort -n
in the first example and' filename | sort -n
in the second one.
– Ivan Olshansky
Feb 18 at 18:42
1
1
it works, thank you! For some reason however the output is out of order, any way to fix this? It's not a big problem since I can fix it in my spreadsheet, but it would help with my worflow. If it matters the numbers in each column can be very large and not only single digits.
– egil137
Feb 18 at 15:13
it works, thank you! For some reason however the output is out of order, any way to fix this? It's not a big problem since I can fix it in my spreadsheet, but it would help with my worflow. If it matters the numbers in each column can be very large and not only single digits.
– egil137
Feb 18 at 15:13
@egil137, The easiest way to sort output is to add
| sort -n
after awk execution. It will look ' | sort -n
in the first example and ' filename | sort -n
in the second one.– Ivan Olshansky
Feb 18 at 18:42
@egil137, The easiest way to sort output is to add
| sort -n
after awk execution. It will look ' | sort -n
in the first example and ' filename | sort -n
in the second one.– Ivan Olshansky
Feb 18 at 18:42
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%2f501091%2fselect-portions-of-one-column-and-paste-as-new-column%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
Would a 3rd section of two columns be handled in the same way, i.e. that the second column is added as a 4th new column?
– Kusalananda
Feb 16 at 20:19
Correct. If the output has n sections in 2 columns, I'd like to convert that into n columns.
– egil137
Feb 16 at 20:34