Reputation: 2805
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
Reputation: 3975
awk 'NR==1&&NF=1' file
grep -om1 '^[^ ]\+' file
# multiple files
awk 'FNR==1&&NF=1' file1 file2
Upvotes: 0
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
first pass through exit block, "_"
is undefined,
so it fails and skips over for row 1.
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.
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
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
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
Reputation: 31
sed -n 1p /etc/*release |cut -d " " -f1
if tab delimited:
sed -n 1p /etc/*release |cut -f1
Upvotes: 3
Reputation: 4906
try this:
head -1 /etc/*release | awk '{print $1}'
Upvotes: 11
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
Reputation: 41
You could use the head
instead of cat
:
head -n1 /etc/*release | awk '{print $1}'
Upvotes: 4
Reputation: 77105
Specify the Line Number using NR
built-in variable.
awk 'NR==1{print $1}' /etc/*release
Upvotes: 25