awk unexpectedly removes dot from string

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP












9















I want to add a column (2nd place) in a .csv file and I want the values of that column to be strings and to be quoted;



The following command does add the column but without quotes:



awk -F"," 'BEGIN OFS = "," $2="2.4.0"; print' test.csv > output.csv


The following approach does incorporate the quotes, but for some reason it removes the last . (dot) from the value



awk -F"," 'BEGIN OFS = "," $2="""2.4.0"""; print' test.csv > output.csv


so my values end up being "2.40".



How should I go about this?










share|improve this question






















  • If your file have 2 or more columns, you want to insert or replace the second column ?

    – ctac_
    Mar 4 at 9:27











  • just insert a column after the first one

    – pkaramol
    Mar 4 at 9:34






  • 2





    ok, so to insert, you must use : awk 'BEGINFS=OFS=","$1=$1","2.4.0""1'

    – ctac_
    Mar 4 at 9:39






  • 1





    or awk 'sub(",",","2.4.0",")1'

    – ctac_
    Mar 4 at 9:50















9















I want to add a column (2nd place) in a .csv file and I want the values of that column to be strings and to be quoted;



The following command does add the column but without quotes:



awk -F"," 'BEGIN OFS = "," $2="2.4.0"; print' test.csv > output.csv


The following approach does incorporate the quotes, but for some reason it removes the last . (dot) from the value



awk -F"," 'BEGIN OFS = "," $2="""2.4.0"""; print' test.csv > output.csv


so my values end up being "2.40".



How should I go about this?










share|improve this question






















  • If your file have 2 or more columns, you want to insert or replace the second column ?

    – ctac_
    Mar 4 at 9:27











  • just insert a column after the first one

    – pkaramol
    Mar 4 at 9:34






  • 2





    ok, so to insert, you must use : awk 'BEGINFS=OFS=","$1=$1","2.4.0""1'

    – ctac_
    Mar 4 at 9:39






  • 1





    or awk 'sub(",",","2.4.0",")1'

    – ctac_
    Mar 4 at 9:50













9












9








9








I want to add a column (2nd place) in a .csv file and I want the values of that column to be strings and to be quoted;



The following command does add the column but without quotes:



awk -F"," 'BEGIN OFS = "," $2="2.4.0"; print' test.csv > output.csv


The following approach does incorporate the quotes, but for some reason it removes the last . (dot) from the value



awk -F"," 'BEGIN OFS = "," $2="""2.4.0"""; print' test.csv > output.csv


so my values end up being "2.40".



How should I go about this?










share|improve this question














I want to add a column (2nd place) in a .csv file and I want the values of that column to be strings and to be quoted;



The following command does add the column but without quotes:



awk -F"," 'BEGIN OFS = "," $2="2.4.0"; print' test.csv > output.csv


The following approach does incorporate the quotes, but for some reason it removes the last . (dot) from the value



awk -F"," 'BEGIN OFS = "," $2="""2.4.0"""; print' test.csv > output.csv


so my values end up being "2.40".



How should I go about this?







awk csv






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Mar 4 at 7:58









pkaramolpkaramol

718621




718621












  • If your file have 2 or more columns, you want to insert or replace the second column ?

    – ctac_
    Mar 4 at 9:27











  • just insert a column after the first one

    – pkaramol
    Mar 4 at 9:34






  • 2





    ok, so to insert, you must use : awk 'BEGINFS=OFS=","$1=$1","2.4.0""1'

    – ctac_
    Mar 4 at 9:39






  • 1





    or awk 'sub(",",","2.4.0",")1'

    – ctac_
    Mar 4 at 9:50

















  • If your file have 2 or more columns, you want to insert or replace the second column ?

    – ctac_
    Mar 4 at 9:27











  • just insert a column after the first one

    – pkaramol
    Mar 4 at 9:34






  • 2





    ok, so to insert, you must use : awk 'BEGINFS=OFS=","$1=$1","2.4.0""1'

    – ctac_
    Mar 4 at 9:39






  • 1





    or awk 'sub(",",","2.4.0",")1'

    – ctac_
    Mar 4 at 9:50
















If your file have 2 or more columns, you want to insert or replace the second column ?

– ctac_
Mar 4 at 9:27





If your file have 2 or more columns, you want to insert or replace the second column ?

– ctac_
Mar 4 at 9:27













just insert a column after the first one

– pkaramol
Mar 4 at 9:34





just insert a column after the first one

– pkaramol
Mar 4 at 9:34




2




2





ok, so to insert, you must use : awk 'BEGINFS=OFS=","$1=$1","2.4.0""1'

– ctac_
Mar 4 at 9:39





ok, so to insert, you must use : awk 'BEGINFS=OFS=","$1=$1","2.4.0""1'

– ctac_
Mar 4 at 9:39




1




1





or awk 'sub(",",","2.4.0",")1'

– ctac_
Mar 4 at 9:50





or awk 'sub(",",","2.4.0",")1'

– ctac_
Mar 4 at 9:50










1 Answer
1






active

oldest

votes


















12














You seem to have got the quotes wrong. You need to do as below



awk -F"," 'BEGIN OFS = "," $2=""2.4.0""; print' test.csv > output.csv


This is explained in the GNU awk man page - 3.2 Escape Sequences




Some characters cannot be included literally in string constants ("foo") or regexp constants (/foo/). Instead, they should be represented with escape sequences, which are character sequences beginning with a backslash (). One use of an escape sequence is to include a double-quote character in a string constant. Because a plain double quote ends the string, you must use " to represent an actual double-quote character as a part of the string..





As far as the reason I could understand the reason for the behavior, awk seems to have interpreted 2.4.0 as a numeric word with the extra quotes from your OP and decides to lose the precision after the first dot.



i.e.



$2="""2.4.0"""


becomes just



$2=""2.4.0""


which awk no longer understands as a string. You can reproduce this behavior by simply doing



awk 'BEGIN print ""2.4.0"" '
2.40


which happens to be the result when you do



awk 'BEGIN print 2.4.0 + 0 '





share|improve this answer




















  • 1





    @roaima: From what I've know, it seems to have just cancelled out and just resulting in print 2.4.0 or print 2.4.0 + 0 , i.e. as a non-string constituent. I've tried to search fro relevant docs too, but couldn't

    – Inian
    Mar 4 at 8:47






  • 2





    Another way of conveniently adding quotes that I sometimes use, is to define a variable, e.g.: awk -v q='"' '... print q "2.4.0" q ...

    – Thor
    Mar 4 at 10:49











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
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f504215%2fawk-unexpectedly-removes-dot-from-string%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









12














You seem to have got the quotes wrong. You need to do as below



awk -F"," 'BEGIN OFS = "," $2=""2.4.0""; print' test.csv > output.csv


This is explained in the GNU awk man page - 3.2 Escape Sequences




Some characters cannot be included literally in string constants ("foo") or regexp constants (/foo/). Instead, they should be represented with escape sequences, which are character sequences beginning with a backslash (). One use of an escape sequence is to include a double-quote character in a string constant. Because a plain double quote ends the string, you must use " to represent an actual double-quote character as a part of the string..





As far as the reason I could understand the reason for the behavior, awk seems to have interpreted 2.4.0 as a numeric word with the extra quotes from your OP and decides to lose the precision after the first dot.



i.e.



$2="""2.4.0"""


becomes just



$2=""2.4.0""


which awk no longer understands as a string. You can reproduce this behavior by simply doing



awk 'BEGIN print ""2.4.0"" '
2.40


which happens to be the result when you do



awk 'BEGIN print 2.4.0 + 0 '





share|improve this answer




















  • 1





    @roaima: From what I've know, it seems to have just cancelled out and just resulting in print 2.4.0 or print 2.4.0 + 0 , i.e. as a non-string constituent. I've tried to search fro relevant docs too, but couldn't

    – Inian
    Mar 4 at 8:47






  • 2





    Another way of conveniently adding quotes that I sometimes use, is to define a variable, e.g.: awk -v q='"' '... print q "2.4.0" q ...

    – Thor
    Mar 4 at 10:49















12














You seem to have got the quotes wrong. You need to do as below



awk -F"," 'BEGIN OFS = "," $2=""2.4.0""; print' test.csv > output.csv


This is explained in the GNU awk man page - 3.2 Escape Sequences




Some characters cannot be included literally in string constants ("foo") or regexp constants (/foo/). Instead, they should be represented with escape sequences, which are character sequences beginning with a backslash (). One use of an escape sequence is to include a double-quote character in a string constant. Because a plain double quote ends the string, you must use " to represent an actual double-quote character as a part of the string..





As far as the reason I could understand the reason for the behavior, awk seems to have interpreted 2.4.0 as a numeric word with the extra quotes from your OP and decides to lose the precision after the first dot.



i.e.



$2="""2.4.0"""


becomes just



$2=""2.4.0""


which awk no longer understands as a string. You can reproduce this behavior by simply doing



awk 'BEGIN print ""2.4.0"" '
2.40


which happens to be the result when you do



awk 'BEGIN print 2.4.0 + 0 '





share|improve this answer




















  • 1





    @roaima: From what I've know, it seems to have just cancelled out and just resulting in print 2.4.0 or print 2.4.0 + 0 , i.e. as a non-string constituent. I've tried to search fro relevant docs too, but couldn't

    – Inian
    Mar 4 at 8:47






  • 2





    Another way of conveniently adding quotes that I sometimes use, is to define a variable, e.g.: awk -v q='"' '... print q "2.4.0" q ...

    – Thor
    Mar 4 at 10:49













12












12








12







You seem to have got the quotes wrong. You need to do as below



awk -F"," 'BEGIN OFS = "," $2=""2.4.0""; print' test.csv > output.csv


This is explained in the GNU awk man page - 3.2 Escape Sequences




Some characters cannot be included literally in string constants ("foo") or regexp constants (/foo/). Instead, they should be represented with escape sequences, which are character sequences beginning with a backslash (). One use of an escape sequence is to include a double-quote character in a string constant. Because a plain double quote ends the string, you must use " to represent an actual double-quote character as a part of the string..





As far as the reason I could understand the reason for the behavior, awk seems to have interpreted 2.4.0 as a numeric word with the extra quotes from your OP and decides to lose the precision after the first dot.



i.e.



$2="""2.4.0"""


becomes just



$2=""2.4.0""


which awk no longer understands as a string. You can reproduce this behavior by simply doing



awk 'BEGIN print ""2.4.0"" '
2.40


which happens to be the result when you do



awk 'BEGIN print 2.4.0 + 0 '





share|improve this answer















You seem to have got the quotes wrong. You need to do as below



awk -F"," 'BEGIN OFS = "," $2=""2.4.0""; print' test.csv > output.csv


This is explained in the GNU awk man page - 3.2 Escape Sequences




Some characters cannot be included literally in string constants ("foo") or regexp constants (/foo/). Instead, they should be represented with escape sequences, which are character sequences beginning with a backslash (). One use of an escape sequence is to include a double-quote character in a string constant. Because a plain double quote ends the string, you must use " to represent an actual double-quote character as a part of the string..





As far as the reason I could understand the reason for the behavior, awk seems to have interpreted 2.4.0 as a numeric word with the extra quotes from your OP and decides to lose the precision after the first dot.



i.e.



$2="""2.4.0"""


becomes just



$2=""2.4.0""


which awk no longer understands as a string. You can reproduce this behavior by simply doing



awk 'BEGIN print ""2.4.0"" '
2.40


which happens to be the result when you do



awk 'BEGIN print 2.4.0 + 0 '






share|improve this answer














share|improve this answer



share|improve this answer








edited Mar 4 at 8:43

























answered Mar 4 at 8:03









InianInian

5,2051529




5,2051529







  • 1





    @roaima: From what I've know, it seems to have just cancelled out and just resulting in print 2.4.0 or print 2.4.0 + 0 , i.e. as a non-string constituent. I've tried to search fro relevant docs too, but couldn't

    – Inian
    Mar 4 at 8:47






  • 2





    Another way of conveniently adding quotes that I sometimes use, is to define a variable, e.g.: awk -v q='"' '... print q "2.4.0" q ...

    – Thor
    Mar 4 at 10:49












  • 1





    @roaima: From what I've know, it seems to have just cancelled out and just resulting in print 2.4.0 or print 2.4.0 + 0 , i.e. as a non-string constituent. I've tried to search fro relevant docs too, but couldn't

    – Inian
    Mar 4 at 8:47






  • 2





    Another way of conveniently adding quotes that I sometimes use, is to define a variable, e.g.: awk -v q='"' '... print q "2.4.0" q ...

    – Thor
    Mar 4 at 10:49







1




1





@roaima: From what I've know, it seems to have just cancelled out and just resulting in print 2.4.0 or print 2.4.0 + 0 , i.e. as a non-string constituent. I've tried to search fro relevant docs too, but couldn't

– Inian
Mar 4 at 8:47





@roaima: From what I've know, it seems to have just cancelled out and just resulting in print 2.4.0 or print 2.4.0 + 0 , i.e. as a non-string constituent. I've tried to search fro relevant docs too, but couldn't

– Inian
Mar 4 at 8:47




2




2





Another way of conveniently adding quotes that I sometimes use, is to define a variable, e.g.: awk -v q='"' '... print q "2.4.0" q ...

– Thor
Mar 4 at 10:49





Another way of conveniently adding quotes that I sometimes use, is to define a variable, e.g.: awk -v q='"' '... print q "2.4.0" q ...

– Thor
Mar 4 at 10:49

















draft saved

draft discarded
















































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.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f504215%2fawk-unexpectedly-removes-dot-from-string%23new-answer', 'question_page');

);

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






Popular posts from this blog

How to check contact read email or not when send email to Individual?

Displaying single band from multi-band raster using QGIS

How many registers does an x86_64 CPU actually have?