Welcome to the Linux Foundation Forum!

Lab 5.1 - question concerning Linux 'cut' command

Hi- This is not a show stopper, but I have done considerable research to understand this command. Just looking to understand this.
1. export client=$(grep client-cert $HOME/.kube/config |cut -d" " -f 6)
From what I have researched I understand the -d flag to indicate a delimiter of a blank space following the text 'client-cert' from where to begin the cut operation; however when looking into the -f flag, all I could find were examples using .csv files. If -f is for 'field', I am not quite sure what field 6 indicates. I understood examples that referenced .csv files, but kind of lost here. Any explanation to this would be greatly appreciated.

Comments

  • Posts: 2,434
    edited April 2021

    Hi @jcremp77,

    Ideally, this kind of question would be posted and answered in a Linux course related forum :wink:

    Assuming your content is field1,field2,field3, running cut -d "," -f 2 yields "field2".
    Assuming your content is field1 field2 field3, running cut -d " " -f 2 yields "field2" as well.

    What do you think happens, if your delimiter is one blank space (just like the second example above -d " ") and your fields were not equally delimited by single spaces, such as field1 field2 field3 (there should be 5 blank spaces between the first two fields and 1 single blank space between the last two fields). Try running the same command cut -d " " -f 2 and see if the output makes sense. Change the value of -f until you see a significant change in the output. Can you explain what caused the change? Was the change expected at all?

    EDIT: For some reason the 5 blank spaces are compressed into 1 single space, but try it either way by typing out the fields and leave 5 spaces between the first two.

    Regards,
    -Chris

  • Posts: 37
    edited April 2021

    Hi @chrispokorni ,

    I am not sure I can articulate it well but I understand why the following is expected (text separated by 5 spaces)
    Note: used for the same reason you mentioned in your reply

    1. field1<5spc>field2<5spc>field3, running cut -d " " -f 2 results in "blank"
    2. field1<5spc>field2<5spc>field3, running cut -d " " -f 6 results in "field2"
    3. field1<5spc>field2<5spc>field3, running cut -d " " -f 11 results in "field3"

    For a single file with 3 rows (1st row separated by 1 space, 2nd by 2, and 3rd by 3)

    #start of file
    field1<1spc>field2<1spc>field3
    field1<2spc>field2<2spc>field3
    field1<3spc>field2<3spc>field3
    #end of file

    If running 'cut -d " " -f 3' on the file above the result would be:


    field3
    field2
    <blank>

    In the above '-f 3' indicates that what follows the 2nd " " will be output for every line in the file; hence the 3rd line returning nothing because 'field1' and 'field2' are separated by 3 " "'s; but '-f 4' would return:


    <blank>
    <blank>
    field2

    Thank you for taking the time to give an explanation to the following command:

    export client=$(grep client-cert $HOME/.kube/config |cut -d" " -f 6)

    Now if the above command had the value of "-f" were changed to 5, then the following output would be:

    client-certificate-data:

Welcome!

It looks like you're new here. Sign in or register to get started.
Sign In

Welcome!

It looks like you're new here. Sign in or register to get started.
Sign In

Categories

Upcoming Training