如何使用 awk 打印最后两列

发布于 2024-10-04 13:50:27 字数 20 浏览 2 评论 0原文

我想要的只是打印最后两列。

All I want is the last two columns printed.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

够钟 2024-10-11 13:50:27

您可以使用变量NF,该变量设置为输入记录中的字段总数:

awk '{print $(NF-1),"\t",$NF}' file

这假设您至少有 2 个字段。

You can make use of variable NF which is set to the total number of fields in the input record:

awk '{print $(NF-1),"\t",$NF}' file

this assumes that you have at least 2 fields.

只怪假的太真实 2024-10-11 13:50:27
awk '{print $NF-1, $NF}'  inputfile

注意:这仅在至少存在两列时才有效。在只有一列的记录上,您将得到一个虚假的 "-1 column1"

awk '{print $NF-1, $NF}'  inputfile

Note: this works only if at least two columns exist. On records with one column you will get a spurious "-1 column1"

莫相离 2024-10-11 13:50:27

@jim mcnamara:尝试在 NF 周围使用括号,即 $(NF-1)$(NF) 而不是 $ NF-1$NF(适用于 FreeBSD awkgawk 的 Mac OS X 10.6.8)。

echo '
1 2
2 3
one
one two three
' | gawk '{if (NF >= 2) print $(NF-1), $(NF);}'

# output:
# 1 2
# 2 3
# two three

@jim mcnamara: try using parentheses for around NF, i. e. $(NF-1) and $(NF) instead of $NF-1 and $NF (works on Mac OS X 10.6.8 for FreeBSD awkand gawk).

echo '
1 2
2 3
one
one two three
' | gawk '{if (NF >= 2) print $(NF-1), $(NF);}'

# output:
# 1 2
# 2 3
# two three
清风无影 2024-10-11 13:50:27

使用 gawk 会出现问题:

 gawk '{ print $NF-1, $NF}' filename
1 2
2 3
-1 one
-1 three
# cat filename
1 2
2 3
one
one two three

我刚刚将 gawk 放在 Solaris 10 M4000 上:
因此,gawk 是 $NF-1 与 $(NF-1) 问题的核心。下一个问题 POSIX 说什么?
per:

http://www.opengroup.org/onlinepubs/009695399/utilities/awk.html

没有任何方向。不好。 gawk 表示减法,其他 awks 表示字段编号或减法。唔。

using gawk exhibits the problem:

 gawk '{ print $NF-1, $NF}' filename
1 2
2 3
-1 one
-1 three
# cat filename
1 2
2 3
one
one two three

I just put gawk on Solaris 10 M4000:
So, gawk is the cuplrit on the $NF-1 vs. $(NF-1) issue. Next question what does POSIX say?
per:

http://www.opengroup.org/onlinepubs/009695399/utilities/awk.html

There is no direction one way or the other. Not good. gawk implies subtraction, other awks imply field number or subtraction. hmm.

我们的影子 2024-10-11 13:50:27

尝试用这个

$ cat /tmp/topfs.txt
/dev/sda2      xfs        32G   10G   22G  32% /

awk print last column
$ cat /tmp/topfs.txt | awk '{print $NF}'

awk print before last column
$ cat /tmp/topfs.txt | awk '{print $(NF-1)}'
32%

awk - print last two columns
$ cat /tmp/topfs.txt | awk '{print $(NF-1), $NF}'
32% /

try with this

$ cat /tmp/topfs.txt
/dev/sda2      xfs        32G   10G   22G  32% /

awk print last column
$ cat /tmp/topfs.txt | awk '{print $NF}'

awk print before last column
$ cat /tmp/topfs.txt | awk '{print $(NF-1)}'
32%

awk - print last two columns
$ cat /tmp/topfs.txt | awk '{print $(NF-1), $NF}'
32% /
笑着哭最痛 2024-10-11 13:50:27

请尝试此操作以考虑所有可能的情况:

awk '{print $(NF-1)"\t"$NF}'  file

awk 'BEGIN{OFS="\t"}' file

awk '{print $(NF-1), $NF} {print $(NF-1), $NF}' file

Please try this out to take into account all possible scenarios:

awk '{print $(NF-1)"\t"$NF}'  file

or

awk 'BEGIN{OFS="\t"}' file

or

awk '{print $(NF-1), $NF} {print $(NF-1), $NF}' file
空心空情空意 2024-10-11 13:50:27

使用 NF>=2NF==1 通过:

$ echo {a..z} | xargs -n5
a b c d e
f g h i j
k l m n o
p q r s t
u v w x y
z

$ echo {a..z} | xargs -n5 |
  awk 'NF == 1 { print $NF };
       NF >= 2 { print $(NF-1), $NF }
      '
d e
i j
n o
s t
x y
z

# or format the `NF==1` via
$ echo {a..z} | xargs -n5 |
  awk 'NF == 1 { printf ("%3s", $NF) };
       NF >= 2 {print $(NF-1), $NF}
      '
d e
i j
n o
s t
x y
  z

using NF>=2 and NF==1 via:

$ echo {a..z} | xargs -n5
a b c d e
f g h i j
k l m n o
p q r s t
u v w x y
z

$ echo {a..z} | xargs -n5 |
  awk 'NF == 1 { print $NF };
       NF >= 2 { print $(NF-1), $NF }
      '
d e
i j
n o
s t
x y
z

# or format the `NF==1` via
$ echo {a..z} | xargs -n5 |
  awk 'NF == 1 { printf ("%3s", $NF) };
       NF >= 2 {print $(NF-1), $NF}
      '
d e
i j
n o
s t
x y
  z
夜空下最亮的亮点 2024-10-11 13:50:27
awk '++_ >= (__ = NF-_--) || ($_ = $__ OFS $++__)_'
awk '++_ >= (__ = NF-_--) || ($_ = $__ OFS $++__)_'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文