如何打印所有列但是最后2?
e.g
input :echo FB_SYS_0032_I03_LTO3_idaen02r_02_20130820_181008
output : FB_SYS_0032_I03_LTO3_idaen02r_02
delimiter : _ (underscore)
答案 0 :(得分:4)
对于你的例子,这个awk one liner应该这样做:
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
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分:0)
只需使用描述最后两个字段的RE:
awk '{sub(/_[^_]*_[^_]*$/,"")}1'
或:
sed 's/_[^_]*_[^_]*$//'
e.g:
$ 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
上面的内容适用于任何现代awk和任何系统上的任何sed。
答案 4 :(得分:0)
可能这是最简单的方法:
$ echo "${input%_*_*}"
FB_SYS_0032_I03_LTO3_idaen02r_02