user3331975
user3331975

Reputation: 2805

cut or awk command to print first field of first row

I am trying print the first field of the first row of an output. Here is the case. I just need to print only SUSE from this output.

# cat /etc/*release

SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 2

Tried with cat /etc/*release | awk {'print $1}' but that print the first string of every row

SUSE
VERSION
PATCHLEVEL

Upvotes: 112

Views: 313778

Answers (10)

ufopilot
ufopilot

Reputation: 3975

awk 'NR==1&&NF=1' file
grep -om1 '^[^ ]\+' file

# multiple files
awk 'FNR==1&&NF=1' file1 file2

Upvotes: 0

RARE Kpop Manifesto
RARE Kpop Manifesto

Reputation: 2801

the most code-golfy way i could think of to print first line only in awk :

awk '_{exit}--_'    # skip the quotations and make it just
                    #   awk _{exit}--_
                    #
                    # if u're feeling adventurous 
  1. first pass through exit block, "_" is undefined, so it fails and skips over for row 1.

  2. then the decrementing of the same counter will make it "TRUE" in awk's eyes (anything not empty string or numeric zero is considered "true" in their agile boolean sense). that same counter also triggers default action of print for row 1.

    —- incrementing… decrementing… it's same thing, 
       merely direction and sign inverted.
    
  3. then finally, at start of row 2, it hits criteria to enter the action block, which instructs it to instantly exit, thus performing essentially the same functionality as

awk '{ print; exit }'

… in a slightly less verbose manner. For a single line print, it's not even worth it to set FS to skip the field splitting part.

using that concept to print just 1st row 1st field :

awk '_{exit} NF=++_'
awk '_++{exit} NF=_'

Upvotes: 0

retr0man
retr0man

Reputation: 61

df -h | head -4 | tail -1 | awk '{ print $2 }'

Change the numbers to tweak it to your liking.

Or use a while loop but thats probably a bad way to do it.

Upvotes: 6

devnull
devnull

Reputation: 123508

Specify NR if you want to capture output from selected rows:

awk 'NR==1{print $1}' /etc/*release

An alternative (ugly) way of achieving the same would be:

awk '{print $1; exit}'

An efficient way of getting the first string from a specific line, say line 42, in the output would be:

awk 'NR==42{print $1; exit}'

Upvotes: 260

Emmanuel
Emmanuel

Reputation: 219

awk, sed, pipe, that's heavy

set `cat /etc/*release`; echo $1

Upvotes: 3

Raha Pazoki
Raha Pazoki

Reputation: 31

sed -n 1p /etc/*release |cut -d " " -f1

if tab delimited:

sed -n 1p /etc/*release |cut -f1

Upvotes: 3

try this:

head -1 /etc/*release | awk '{print $1}'

Upvotes: 11

Jayesh Bhoi
Jayesh Bhoi

Reputation: 25875

Try

sed 'NUMq;d'  /etc/*release | awk {'print $1}'

where NUM is line number

ex. sed '1q;d'  /etc/*release | awk {'print $1}'

Upvotes: 1

Junaid18183
Junaid18183

Reputation: 41

You could use the head instead of cat:

head -n1 /etc/*release | awk '{print $1}'

Upvotes: 4

jaypal singh
jaypal singh

Reputation: 77105

Specify the Line Number using NR built-in variable.

awk 'NR==1{print $1}' /etc/*release

Upvotes: 25

Related Questions