1

如何打印除最后 2 列之外的所有列?

例如

input :echo FB_SYS_0032_I03_LTO3_idaen02r_02_20130820_181008
output : FB_SYS_0032_I03_LTO3_idaen02r_02
delimiter : _ (underscore)
4

5 回答 5

6

对于你的例子,这个 awk 一个班轮应该做:

awk -F'_' -v OFS='_' 'NF-=2' file

测试:

kent$  awk -F'_' -v OFS='_' 'NF-=2' <<< "FB_SYS_0032_I03_LTO3_idaen02r_02_20130820_181008"
FB_SYS_0032_I03_LTO3_idaen02r_02
于 2013-08-21T12:22:57.837 回答
3

只需使用描述最后 2 个字段的 RE:

awk '{sub(/_[^_]*_[^_]*$/,"")}1'

或者:

sed 's/_[^_]*_[^_]*$//'

例如:

$ echo FB_SYS_0032_I03_LTO3_idaen02r_02_20130820_181008 | awk '{sub(/_[^_]*_[^_]*$/,"")}1'
FB_SYS_0032_I03_LTO3_idaen02r_02

$ echo FB_SYS_0032_I03_LTO3_idaen02r_02_20130820_181008 | sed 's/_[^_]*_[^_]*$//'
FB_SYS_0032_I03_LTO3_idaen02r_02

上面的 Te 将适用于任何系统上的任何现代 awk 和任何 sed。

于 2013-08-21T12:34:01.257 回答
1

使用这个 awk 命令:

 awk -F "_" '{for (i=1; i<=NF-2; i++) {printf ("%s", $i); if (i<NF-2) printf "_"} print ""}'
 FB_SYS_0032_I03_LTO3_idaen02r_02
于 2013-08-21T12:20:19.250 回答
1

使用sed

sed -r 's/(_[^_]*){2}$//'

例如,

$ echo 1_2_3_4_5 | sed -r 's/(_[^_]*){2}$//'
1_2_3
$ echo 1_2_3_4 | sed -r 's/(_[^_]*){2}$//'
1_2
$ echo FB_SYS_0032_I03_LTO3_idaen02r_02_20130820_181008 | sed -r 's/(_[^_]*){2}$//'
FB_SYS_0032_I03_LTO3_idaen02r_02
于 2013-08-21T12:26:01.520 回答
0

可能这是最简单的方法:

$ input="FB_SYS_0032_I03_LTO3_idaen02r_02_20130820_181008"

$ echo "${input%_*_*}"
FB_SYS_0032_I03_LTO3_idaen02r_02
于 2019-10-01T10:14:59.697 回答