linux 如果你一直执行这个脚本,如何使用awk打印第一行之后的每一行?

vsdwdz23  于 2023-01-29  发布在  Linux
关注(0)|答案(2)|浏览(596)

如果标题不清楚,请原谅。我有一个由calcurse生成的文本文件,用于列出我的日历事件。文件的内容如下:

01/23/23:
 * Homework                                                                              
 * Sports

时间并不重要,我只想看到事件。关键是我想让它显示在我的窗口管理器(i3 wm)中。我正在考虑创建一个按钮,在单击时执行脚本(可能使用polybar)。这个脚本将显示文本文件的第二行;点击后,脚本将显示第3行,依此类推......显示单行的原因是i3 bar的宽度较小,因此只能显示1行(1个事件)。
我正在考虑使用awk,我可以测试以下内容:

head -1 myfile | awk '{print $1}' gives 01/23/23:
head -2 myfile | awk '{print $2}' gives Homework

但是

head -3 myfile | awk '{print $3}'

不生产体育。
有没有人能帮我解决这个问题?另外,对我的使用情况有任何建议都将不胜感激。

mwngjboj

mwngjboj1#

不需要head

awk -v n=3 'NR==n { sub(/^ \* /,""); print; exit }' myfile

您没有看到代码中的Sports输出,因为print $3试图打印只有*Sports两个字段的行的第3个字段。

ccrfmcuu

ccrfmcuu2#

这里有一点题外话,但是-head查看的是行。awk(在您的示例中)查看的是head传递的每一行的字段。
使用

01/23/23:
 * Homework                                                                              
 * Sports

然后

head -1 myfile | awk '{print $1}' # gives 01/23/23:

这返回日期,不是因为$1引用了第一个 * 行 *,而是它所接收的only行的第一个 * 字段 *。

head -2 myfile | awk '{print $2}' # gives Homework

这再次涉及 * 字段 *。
它读取第一行,其中日期是$1,但是没有$2,尽管它应该打印一个空行。head -2阻止它处理第3行,否则它也会打印Sports。在这两行中,$1都是星号。

head -3 myfile | awk '{print $3}'

这些行都没有第三个字段。
按照我的理解,要执行您的建议,您需要一种方法来跟踪每次调用时您想要的行。
如果您能够在这些行中进行传递到head的后续调用,那么艾德的awk解决方案要好得多。

相关问题