如何在Linux上的Bash中排除最后N列?

How to exclude last N columns of a string in bash? The point is that the number of columns in each line is uncertain (but > N).

如何在bash中排除字符串的最后N列? 关键是每行中的列数不确定(但> N)。

For example, I would like to remove the last 2 columns separated by ‘.’ in the following lines.

例如,我要删除以“。”分隔的最后两列。 在以下几行中。

systemd.3.gz
systemd.mount.3.gz
systemd.mount.f.3.gz

The simple cut command

简单的cut命令

cut -d'.' -f1

only works for the 1st line and will fail for the last 2 lines.

仅适用于第一行,而不适用于最后两行。

How to exclude last N columns in Bash on Linux?

如何在Linux上的 Bash中排除最后N列?

I provide 2 method here, one using cut plus rev and another one use awk.

我在这里提供2种方法,一种使用cut plus rev ,另一种使用awk

Exclude last 2 columns using cut and rev

使用cutrev排除最后2列

Used together with rev, cut needs not to know the number of columns in a line.

rev一起使用时, cut不需要知道一行中的列数。

rev | cut -d '.' -f3- | rev

Example,

例,

$ cat /tmp/test.txt 
| rev | cut -d '.' -f3- | rev
systemd
systemd.mount
systemd.mount.f

Exclude last 2 columns using awk

使用awk排除最后两列

awk -F. '{for(i=0;++i<=NF-3;) printf $i".";print $(NF-2)}' 

Example,

例,

$ cat /tmp/test.txt 
| awk -F. '{for(i=0;++i<=NF-3;) printf $i"."; print $(NF-2)}' 
systemd
systemd.mount
systemd.mount.f
Answered by Eric Z Ma.
埃里克·马(Eric Z Ma)回答。

翻译自: https://www.systutorials.com/how-to-exclude-last-n-columns-in-bash-on-linux/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值