How to split a string in two substrings of same length using bash?How to split a string into an array in bashBash Combine Replacement and Sub String Extraction in One StepPiping bash string manipulationBash - Split quoted parametersSplit single string into character array using ONLY bashPrint month between two wordsSplit a string by some separator in bash?Cut the string in half with the last specific character shows up in the stringbash command to print string in unambiguous formsplit string to two parts using sed or awk or perl or bash
Is it possible for underground bunkers on different continents to be connected?
Why can't I craft scaffolding in Minecraft 1.14?
Can "Es tut mir leid" be used to express empathy rather than remorse?
Leaving job close to major deadlines
...and then she held the gun
New Site Design!
Using roof rails to set up hammock
Why is an array with a single number in it considered a number?
The instant an accelerating object has zero speed, is it speeding up, slowing down, or neither?
How could I create a situation in which a PC has to make a saving throw or be forced to pet a dog?
Interview was just a one hour panel. Got an offer the next day; do I accept or is this a red flag?
When is the phrase "j'ai bon" used?
Is this set open or closed (or both?)
Why does my system use more RAM after an hour of usage?
What could be the physiological mechanism for a biological Geiger counter?
what is "dot" sign in the •NO?
Co-worker is now managing my team. Does this mean that I'm being demoted?
How Linux command "mount -a" works
Should I email my professor to clear up a (possibly very irrelevant) awkward misunderstanding?
Is my research statement supposed to lead to papers in top journals?
Can a 40amp breaker be used safely and without issue with a 40amp device on 6AWG wire?
2 Managed Packages in 1 Dev Org
How would Japanese people react to someone refusing to say “itadakimasu” for religious reasons?
1960s sci-fi anthology with a Viking fighting a U.S. army MP on the cover
How to split a string in two substrings of same length using bash?
How to split a string into an array in bashBash Combine Replacement and Sub String Extraction in One StepPiping bash string manipulationBash - Split quoted parametersSplit single string into character array using ONLY bashPrint month between two wordsSplit a string by some separator in bash?Cut the string in half with the last specific character shows up in the stringbash command to print string in unambiguous formsplit string to two parts using sed or awk or perl or bash
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I would like to split a string into two halves and print them sequentially. For example:
abcdef
into
abc
def
Is there a simple way to do it, or it needs some string processing?
bash string
add a comment |
I would like to split a string into two halves and print them sequentially. For example:
abcdef
into
abc
def
Is there a simple way to do it, or it needs some string processing?
bash string
How do you have the incoming string? Variable? Stdin? Other?
– Jeff Schaller♦
May 30 at 21:24
1
In a variable. It doesn't really matter, as anything can be worked out (stdin input can be put in a variable).
– Gabriel Diego
May 30 at 21:27
It matters for efficiency, especially if it can be possibly-gigantic. And also for convenience.
– Peter Cordes
May 31 at 10:36
add a comment |
I would like to split a string into two halves and print them sequentially. For example:
abcdef
into
abc
def
Is there a simple way to do it, or it needs some string processing?
bash string
I would like to split a string into two halves and print them sequentially. For example:
abcdef
into
abc
def
Is there a simple way to do it, or it needs some string processing?
bash string
bash string
edited May 30 at 21:23
Jeff Schaller♦
46.8k1167152
46.8k1167152
asked May 30 at 21:11
Gabriel DiegoGabriel Diego
1665
1665
How do you have the incoming string? Variable? Stdin? Other?
– Jeff Schaller♦
May 30 at 21:24
1
In a variable. It doesn't really matter, as anything can be worked out (stdin input can be put in a variable).
– Gabriel Diego
May 30 at 21:27
It matters for efficiency, especially if it can be possibly-gigantic. And also for convenience.
– Peter Cordes
May 31 at 10:36
add a comment |
How do you have the incoming string? Variable? Stdin? Other?
– Jeff Schaller♦
May 30 at 21:24
1
In a variable. It doesn't really matter, as anything can be worked out (stdin input can be put in a variable).
– Gabriel Diego
May 30 at 21:27
It matters for efficiency, especially if it can be possibly-gigantic. And also for convenience.
– Peter Cordes
May 31 at 10:36
How do you have the incoming string? Variable? Stdin? Other?
– Jeff Schaller♦
May 30 at 21:24
How do you have the incoming string? Variable? Stdin? Other?
– Jeff Schaller♦
May 30 at 21:24
1
1
In a variable. It doesn't really matter, as anything can be worked out (stdin input can be put in a variable).
– Gabriel Diego
May 30 at 21:27
In a variable. It doesn't really matter, as anything can be worked out (stdin input can be put in a variable).
– Gabriel Diego
May 30 at 21:27
It matters for efficiency, especially if it can be possibly-gigantic. And also for convenience.
– Peter Cordes
May 31 at 10:36
It matters for efficiency, especially if it can be possibly-gigantic. And also for convenience.
– Peter Cordes
May 31 at 10:36
add a comment |
4 Answers
4
active
oldest
votes
Using parameter expansion and shell arithmetic:
The first half of the variable will be:
$var:0:$#var/2
The second half of the variable will be:
$var:$#var/2
so you could use:
printf '%sn' "$var:0:$#var/2" "$var:$#var/2"
You could also use the following awk command:
awk 'BEGINFS=""for(i=1;i<=NF/2;i++)printf $iprintf "n"for(i=NF/2+1;i<=NF;i++)printf $iprintf "n"'
$ echo abcdef | awk 'BEGINFS=""for(i=1;i<=NF/2;i++)printf $iprintf "n"for(i=NF/2+1;i<=NF;i++)printf $iprintf "n"'
abc
def
Thanks for the response!
– Gabriel Diego
May 30 at 21:19
concise and elegant solution.
– Dudi Boy
May 30 at 21:32
3
You can get rid of the$((...))
; theoff
andlen
part of the$var:off:len
substitution are already evaluated as arithmetic expressions. Example:foo=01234567; echo "$foo:0:$#foo/2 $foo:$#foo/2"
. That's documented, and it's the same inzsh
andksh93
as in bash.
– mosvy
May 30 at 21:47
3
Note: If the length of the string is odd, this will still split it into two parts, but the second will be a character longer.
– peterh
May 31 at 7:39
add a comment |
Using split
, here strings and command substitution:
var=abcdef
printf '%sn' "$(split -n1/2 <<<$var)" "$(split -n2/2 <<<$var)"
add a comment |
Another awk
script can be:
echo abcdef | awk 'print substr($0,1,length/2); print substr($0,length/2+1)'
1
Note that it doesn't work with mawk or busybox awk because of the syntax ambiguity of division/
and the/ERE/
operator, and the special case of()
being optional forlength
(still those implementations are not POSIX compliant in that case). Usinglength()
orlength($0)
here instead oflength
would help for those. You could also doawk 'BEGINhalf = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)' abcdef
which would save the pipe and extra process and make it work even if the string contains newline characters.
– Stéphane Chazelas
May 31 at 10:55
add a comment |
Python 3
s = input() # Take one line of input from stdin.
x = len(s) // 2 # Get middle of string. "//" is floor division
print(s[:x], s[x:], sep="n") # Print "s" up to "x", then "s" past "x", joined on newlines.
For example,
$ echo abcdef | python3 -c 's = input(); x = len(s) // 2; print(s[:x], s[x:], sep="n")'
abc
def
If the string length is not an even number, the second line will be longer. E.g.
$ echo abcdefg | python3 -c 's = input(); x= len(s) // 2; print(s[:x], s[x:], sep="n")'
abc
defg
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%2f522052%2fhow-to-split-a-string-in-two-substrings-of-same-length-using-bash%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
Using parameter expansion and shell arithmetic:
The first half of the variable will be:
$var:0:$#var/2
The second half of the variable will be:
$var:$#var/2
so you could use:
printf '%sn' "$var:0:$#var/2" "$var:$#var/2"
You could also use the following awk command:
awk 'BEGINFS=""for(i=1;i<=NF/2;i++)printf $iprintf "n"for(i=NF/2+1;i<=NF;i++)printf $iprintf "n"'
$ echo abcdef | awk 'BEGINFS=""for(i=1;i<=NF/2;i++)printf $iprintf "n"for(i=NF/2+1;i<=NF;i++)printf $iprintf "n"'
abc
def
Thanks for the response!
– Gabriel Diego
May 30 at 21:19
concise and elegant solution.
– Dudi Boy
May 30 at 21:32
3
You can get rid of the$((...))
; theoff
andlen
part of the$var:off:len
substitution are already evaluated as arithmetic expressions. Example:foo=01234567; echo "$foo:0:$#foo/2 $foo:$#foo/2"
. That's documented, and it's the same inzsh
andksh93
as in bash.
– mosvy
May 30 at 21:47
3
Note: If the length of the string is odd, this will still split it into two parts, but the second will be a character longer.
– peterh
May 31 at 7:39
add a comment |
Using parameter expansion and shell arithmetic:
The first half of the variable will be:
$var:0:$#var/2
The second half of the variable will be:
$var:$#var/2
so you could use:
printf '%sn' "$var:0:$#var/2" "$var:$#var/2"
You could also use the following awk command:
awk 'BEGINFS=""for(i=1;i<=NF/2;i++)printf $iprintf "n"for(i=NF/2+1;i<=NF;i++)printf $iprintf "n"'
$ echo abcdef | awk 'BEGINFS=""for(i=1;i<=NF/2;i++)printf $iprintf "n"for(i=NF/2+1;i<=NF;i++)printf $iprintf "n"'
abc
def
Thanks for the response!
– Gabriel Diego
May 30 at 21:19
concise and elegant solution.
– Dudi Boy
May 30 at 21:32
3
You can get rid of the$((...))
; theoff
andlen
part of the$var:off:len
substitution are already evaluated as arithmetic expressions. Example:foo=01234567; echo "$foo:0:$#foo/2 $foo:$#foo/2"
. That's documented, and it's the same inzsh
andksh93
as in bash.
– mosvy
May 30 at 21:47
3
Note: If the length of the string is odd, this will still split it into two parts, but the second will be a character longer.
– peterh
May 31 at 7:39
add a comment |
Using parameter expansion and shell arithmetic:
The first half of the variable will be:
$var:0:$#var/2
The second half of the variable will be:
$var:$#var/2
so you could use:
printf '%sn' "$var:0:$#var/2" "$var:$#var/2"
You could also use the following awk command:
awk 'BEGINFS=""for(i=1;i<=NF/2;i++)printf $iprintf "n"for(i=NF/2+1;i<=NF;i++)printf $iprintf "n"'
$ echo abcdef | awk 'BEGINFS=""for(i=1;i<=NF/2;i++)printf $iprintf "n"for(i=NF/2+1;i<=NF;i++)printf $iprintf "n"'
abc
def
Using parameter expansion and shell arithmetic:
The first half of the variable will be:
$var:0:$#var/2
The second half of the variable will be:
$var:$#var/2
so you could use:
printf '%sn' "$var:0:$#var/2" "$var:$#var/2"
You could also use the following awk command:
awk 'BEGINFS=""for(i=1;i<=NF/2;i++)printf $iprintf "n"for(i=NF/2+1;i<=NF;i++)printf $iprintf "n"'
$ echo abcdef | awk 'BEGINFS=""for(i=1;i<=NF/2;i++)printf $iprintf "n"for(i=NF/2+1;i<=NF;i++)printf $iprintf "n"'
abc
def
edited May 30 at 22:07
answered May 30 at 21:18
Jesse_bJesse_b
16.7k34183
16.7k34183
Thanks for the response!
– Gabriel Diego
May 30 at 21:19
concise and elegant solution.
– Dudi Boy
May 30 at 21:32
3
You can get rid of the$((...))
; theoff
andlen
part of the$var:off:len
substitution are already evaluated as arithmetic expressions. Example:foo=01234567; echo "$foo:0:$#foo/2 $foo:$#foo/2"
. That's documented, and it's the same inzsh
andksh93
as in bash.
– mosvy
May 30 at 21:47
3
Note: If the length of the string is odd, this will still split it into two parts, but the second will be a character longer.
– peterh
May 31 at 7:39
add a comment |
Thanks for the response!
– Gabriel Diego
May 30 at 21:19
concise and elegant solution.
– Dudi Boy
May 30 at 21:32
3
You can get rid of the$((...))
; theoff
andlen
part of the$var:off:len
substitution are already evaluated as arithmetic expressions. Example:foo=01234567; echo "$foo:0:$#foo/2 $foo:$#foo/2"
. That's documented, and it's the same inzsh
andksh93
as in bash.
– mosvy
May 30 at 21:47
3
Note: If the length of the string is odd, this will still split it into two parts, but the second will be a character longer.
– peterh
May 31 at 7:39
Thanks for the response!
– Gabriel Diego
May 30 at 21:19
Thanks for the response!
– Gabriel Diego
May 30 at 21:19
concise and elegant solution.
– Dudi Boy
May 30 at 21:32
concise and elegant solution.
– Dudi Boy
May 30 at 21:32
3
3
You can get rid of the
$((...))
; the off
and len
part of the $var:off:len
substitution are already evaluated as arithmetic expressions. Example: foo=01234567; echo "$foo:0:$#foo/2 $foo:$#foo/2"
. That's documented, and it's the same in zsh
and ksh93
as in bash.– mosvy
May 30 at 21:47
You can get rid of the
$((...))
; the off
and len
part of the $var:off:len
substitution are already evaluated as arithmetic expressions. Example: foo=01234567; echo "$foo:0:$#foo/2 $foo:$#foo/2"
. That's documented, and it's the same in zsh
and ksh93
as in bash.– mosvy
May 30 at 21:47
3
3
Note: If the length of the string is odd, this will still split it into two parts, but the second will be a character longer.
– peterh
May 31 at 7:39
Note: If the length of the string is odd, this will still split it into two parts, but the second will be a character longer.
– peterh
May 31 at 7:39
add a comment |
Using split
, here strings and command substitution:
var=abcdef
printf '%sn' "$(split -n1/2 <<<$var)" "$(split -n2/2 <<<$var)"
add a comment |
Using split
, here strings and command substitution:
var=abcdef
printf '%sn' "$(split -n1/2 <<<$var)" "$(split -n2/2 <<<$var)"
add a comment |
Using split
, here strings and command substitution:
var=abcdef
printf '%sn' "$(split -n1/2 <<<$var)" "$(split -n2/2 <<<$var)"
Using split
, here strings and command substitution:
var=abcdef
printf '%sn' "$(split -n1/2 <<<$var)" "$(split -n2/2 <<<$var)"
answered May 30 at 21:42
FreddyFreddy
4,8331521
4,8331521
add a comment |
add a comment |
Another awk
script can be:
echo abcdef | awk 'print substr($0,1,length/2); print substr($0,length/2+1)'
1
Note that it doesn't work with mawk or busybox awk because of the syntax ambiguity of division/
and the/ERE/
operator, and the special case of()
being optional forlength
(still those implementations are not POSIX compliant in that case). Usinglength()
orlength($0)
here instead oflength
would help for those. You could also doawk 'BEGINhalf = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)' abcdef
which would save the pipe and extra process and make it work even if the string contains newline characters.
– Stéphane Chazelas
May 31 at 10:55
add a comment |
Another awk
script can be:
echo abcdef | awk 'print substr($0,1,length/2); print substr($0,length/2+1)'
1
Note that it doesn't work with mawk or busybox awk because of the syntax ambiguity of division/
and the/ERE/
operator, and the special case of()
being optional forlength
(still those implementations are not POSIX compliant in that case). Usinglength()
orlength($0)
here instead oflength
would help for those. You could also doawk 'BEGINhalf = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)' abcdef
which would save the pipe and extra process and make it work even if the string contains newline characters.
– Stéphane Chazelas
May 31 at 10:55
add a comment |
Another awk
script can be:
echo abcdef | awk 'print substr($0,1,length/2); print substr($0,length/2+1)'
Another awk
script can be:
echo abcdef | awk 'print substr($0,1,length/2); print substr($0,length/2+1)'
answered May 30 at 21:37
Dudi BoyDudi Boy
40627
40627
1
Note that it doesn't work with mawk or busybox awk because of the syntax ambiguity of division/
and the/ERE/
operator, and the special case of()
being optional forlength
(still those implementations are not POSIX compliant in that case). Usinglength()
orlength($0)
here instead oflength
would help for those. You could also doawk 'BEGINhalf = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)' abcdef
which would save the pipe and extra process and make it work even if the string contains newline characters.
– Stéphane Chazelas
May 31 at 10:55
add a comment |
1
Note that it doesn't work with mawk or busybox awk because of the syntax ambiguity of division/
and the/ERE/
operator, and the special case of()
being optional forlength
(still those implementations are not POSIX compliant in that case). Usinglength()
orlength($0)
here instead oflength
would help for those. You could also doawk 'BEGINhalf = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)' abcdef
which would save the pipe and extra process and make it work even if the string contains newline characters.
– Stéphane Chazelas
May 31 at 10:55
1
1
Note that it doesn't work with mawk or busybox awk because of the syntax ambiguity of division
/
and the /ERE/
operator, and the special case of ()
being optional for length
(still those implementations are not POSIX compliant in that case). Using length()
or length($0)
here instead of length
would help for those. You could also do awk 'BEGINhalf = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)' abcdef
which would save the pipe and extra process and make it work even if the string contains newline characters.– Stéphane Chazelas
May 31 at 10:55
Note that it doesn't work with mawk or busybox awk because of the syntax ambiguity of division
/
and the /ERE/
operator, and the special case of ()
being optional for length
(still those implementations are not POSIX compliant in that case). Using length()
or length($0)
here instead of length
would help for those. You could also do awk 'BEGINhalf = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)' abcdef
which would save the pipe and extra process and make it work even if the string contains newline characters.– Stéphane Chazelas
May 31 at 10:55
add a comment |
Python 3
s = input() # Take one line of input from stdin.
x = len(s) // 2 # Get middle of string. "//" is floor division
print(s[:x], s[x:], sep="n") # Print "s" up to "x", then "s" past "x", joined on newlines.
For example,
$ echo abcdef | python3 -c 's = input(); x = len(s) // 2; print(s[:x], s[x:], sep="n")'
abc
def
If the string length is not an even number, the second line will be longer. E.g.
$ echo abcdefg | python3 -c 's = input(); x= len(s) // 2; print(s[:x], s[x:], sep="n")'
abc
defg
add a comment |
Python 3
s = input() # Take one line of input from stdin.
x = len(s) // 2 # Get middle of string. "//" is floor division
print(s[:x], s[x:], sep="n") # Print "s" up to "x", then "s" past "x", joined on newlines.
For example,
$ echo abcdef | python3 -c 's = input(); x = len(s) // 2; print(s[:x], s[x:], sep="n")'
abc
def
If the string length is not an even number, the second line will be longer. E.g.
$ echo abcdefg | python3 -c 's = input(); x= len(s) // 2; print(s[:x], s[x:], sep="n")'
abc
defg
add a comment |
Python 3
s = input() # Take one line of input from stdin.
x = len(s) // 2 # Get middle of string. "//" is floor division
print(s[:x], s[x:], sep="n") # Print "s" up to "x", then "s" past "x", joined on newlines.
For example,
$ echo abcdef | python3 -c 's = input(); x = len(s) // 2; print(s[:x], s[x:], sep="n")'
abc
def
If the string length is not an even number, the second line will be longer. E.g.
$ echo abcdefg | python3 -c 's = input(); x= len(s) // 2; print(s[:x], s[x:], sep="n")'
abc
defg
Python 3
s = input() # Take one line of input from stdin.
x = len(s) // 2 # Get middle of string. "//" is floor division
print(s[:x], s[x:], sep="n") # Print "s" up to "x", then "s" past "x", joined on newlines.
For example,
$ echo abcdef | python3 -c 's = input(); x = len(s) // 2; print(s[:x], s[x:], sep="n")'
abc
def
If the string length is not an even number, the second line will be longer. E.g.
$ echo abcdefg | python3 -c 's = input(); x= len(s) // 2; print(s[:x], s[x:], sep="n")'
abc
defg
edited May 31 at 14:07
answered May 31 at 14:02
wjandreawjandrea
590414
590414
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%2f522052%2fhow-to-split-a-string-in-two-substrings-of-same-length-using-bash%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
How do you have the incoming string? Variable? Stdin? Other?
– Jeff Schaller♦
May 30 at 21:24
1
In a variable. It doesn't really matter, as anything can be worked out (stdin input can be put in a variable).
– Gabriel Diego
May 30 at 21:27
It matters for efficiency, especially if it can be possibly-gigantic. And also for convenience.
– Peter Cordes
May 31 at 10:36