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
使用cut
和rev
排除最后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
翻译自: https://www.systutorials.com/how-to-exclude-last-n-columns-in-bash-on-linux/