print specific field from first line in file using awk
awk, field, line
Solution
Qualify another block with `NR==1`:
awk 'NR==1 { print "First Login:", $1, $2, $3 } END { print "Last Login:", $1, $2, $3 }' logins.txt
Results:
First Login: Feb 13 2:43
Last Login: Feb 14 8:47
`NR` is short for number of rows. See here. HTH.
EDIT1:
Here's two ways, depending on your style. The first would be considered more correct:
awk 'NR==1 { a=$1; b=$2; c=$3 } { print "Blah" } END { print "First Login:", a, b, c RS "Last Login:", $1, $2, $3 }' logins.txt
awk 'NR==1 { x=("First Login:" FS $1 FS $2 FS $3) } { print "Blah" } END { print x RS "Last Login:", $1, $2, $3 }' logins.txt
Results:
Blah
Blah
Blah
Blah
Blah
Blah
Blah
First Login: Feb 13 2:43
Last Login: Feb 14 8:47
EDIT2:
Run your script like:
awk -f script.awk logins.txt
Contents of `script.awk`:
NR==1 {
a=$1
b=$2
c=$3
}
{
print "Blah"
}
END {
print "First Login:", a, b, c RS "Last Login:", $1, $2, $3
}
EDIT3:
BEGIN { OFS="\t\t" }
NR==1 { a=$1; b=$2; c=$3 }
END{
print "Feed\t\t\tAccepted\tRejected\tCanceled"
print "-----------------------------------------------------------------"
print "swrinde:", accepted_sw, rejected_sw, canceled_sw
print "news.cais.net:", accepted_ne, rejected_ne, canceled_ne
print "?:\t", accepted_un, rejected_un, canceled_un
print "Start Time = " a FS b FS c
print "End Time = " $1 FS $2 FS $3
}
Results:
Feed Accepted Rejected Canceled
-----------------------------------------------------------------
swrinde:
news.cais.net:
?:
Start Time = Feb 13 2:43
End Time = Feb 14 8:47
Problem
I have a file (logins.txt) that I need to make into a file that only displays the first and last login date/time and the last login date/time. The logins.txt looks like this: ``` Feb 13 2:43 (login IP) Feb 13 2:48 (login IP) Feb 13 5:23 (login IP) Feb 13 9:43 (login IP) Feb 14 1:34 (login IP) Feb 14 8:42 (login IP) Feb 14 8:47 (login IP) ``` I want to print: ``` First Login: Feb 13 2:43 Last Login: Feb 14 8:47 ``` Now keep in mind I'm using an .awk file where I have all my awk statements in that executes logins.txt and makes a different file with what I want to print out. The last login was easy. I simply just put: ``` END{ print "$1, $2, $3"; } ``` Which prints out the last occurrence of those fields. But how do I do it with the first occurrence? EDIT: Awesome, putting NR==1 works but I NEED this in the END field because I need it below other stuff I want to print. How do I put it below everything? Also I want it to print like this: ``` Blah blah blah blah blah blah blah blah Blah blah blah blah blah blah blah blah Blah blah blah blah blah blah blah blah First Login: Feb 13 2:43 Last Login: Feb 14 8:47 ``` Here is my END with print statements ``` NF==1 {a=$1; b=$2; c=$3;} END{ print "Feed\t\t\tAccepted\tRejected\tCanceled"; print "-----------------------------------------------------------------"; print "swrinde:\t\t", accepted_sw"\t\t", rejected_sw"\t\t", canceled_sw"\t\t"; print "news.cais.net:\t\t", accepted_ne"\t\t", rejected_ne"\t\t", canceled_ne"\t\t"; print "\?:\t\t\t", accepted_un"\t\t", rejected_un"\t\t", canceled_un"\t\t"; print "\nStart Time = ", a, b, c RS "\tEnd Time =", $1, $2, $3; } ```