gpt4 book ai didi

awk - 使用 awk 从文件第一行打印特定字段

转载 作者:行者123 更新时间:2023-12-02 04:52:07 25 4
gpt4 key购买 nike

我有一个文件(logins.txt),我需要将其制作成仅显示第一次和最后一次登录日期/时间以及最后一次登录日期/时间的文件。 logins.txt 如下所示:

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)

我要打印:

First Login: Feb 13 2:43
Last Login: Feb 14 8:47

现在请记住,我正在使用一个 .awk 文件,其中包含所有 awk 语句,该语句执行 logins.txt 并使用我想要打印的内容创建一个不同的文件。

上次登录很简单。我简单地说:

END{
print "$1, $2, $3";
}

打印出这些字段的最后一次出现。但是第一次出现时我该怎么做呢?

编辑:太棒了,将 NR==1 可以工作,但我需要将其放在 END 字段中,因为我需要它位于我想打印的其他内容下方。我如何将它放在所有内容下面?我还希望它像这样打印:

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

这是我的带有打印语句的 END

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

最佳答案

NR==1限定另一个 block :

awk 'NR==1 { print "First Login:", $1, $2, $3 } END { print "Last Login:", $1, $2, $3 }' logins.txt

结果:

First Login: Feb 13 2:43
Last Login: Feb 14 8:47

NR 是行数的缩写。请参阅here 。 HTH。

<小时/>

编辑1:

这里有两种方法,具体取决于您的风格。第一个被认为更正确:

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

结果:

Blah
Blah
Blah
Blah
Blah
Blah
Blah
First Login: Feb 13 2:43
Last Login: Feb 14 8:47

编辑2:

运行你的脚本:

awk -f script.awk logins.txt

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
}

编辑3:

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
}

结果:

Feed            Accepted    Rejected    Canceled
-----------------------------------------------------------------
swrinde:
news.cais.net:
?:
Start Time = Feb 13 2:43
End Time = Feb 14 8:47

关于awk - 使用 awk 从文件第一行打印特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14971102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com