首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >打印AWK列的最后一个字段

打印AWK列的最后一个字段
EN

Stack Overflow用户
提问于 2015-08-06 12:00:58
回答 3查看 115关注 0票数 0

我有一个具有以下输入的文件:

代码语言:javascript
运行
复制
10 0,12
10 1,14
10 2,63
20 0,12
20 1,98
20 3,15

我有三个与10相关联的数值和三个对应于20个的值,所以我想打印每个值的最后一个值(10-2,63/ 20 - 3,15),也包括10和20。我一直在努力,但我没能做到。

我很感激你能给我的任何建议来解决这个问题。

致以问候。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-06 13:16:43

只需将当前的第一个字段与前一个字段进行比较。如果它们不匹配,则打印前一行:

代码语言:javascript
运行
复制
$ awk 'prev && id!=$1 {print prev} {prev=$0; id=$1} END {print prev}' a
10 2,63
20 3,15
票数 4
EN

Stack Overflow用户

发布于 2015-08-06 12:10:55

你总是有10 x 10 x 10 x 20 x 20 x 20 x吗?

如果始终具有此架构,则可以将信息拆分为如下空格:

代码语言:javascript
运行
复制
echo "10 0,12 10 1,14 10 2,63 20 0,12 20 1,98 20 3,15" | awk '{split($0,n," "); print n[5],n[6],n[11],n[12]}'

这个数组里面是什么?

代码语言:javascript
运行
复制
n[1] = 10
n[2] = 0,12
n[3] = 10
n[4] = 1,14
n[5] = 10
n[6] = 2,63
n[7] = 20
n[8] = 0,12
n[9] = 20
n[10] = 1,98
n[11] = 20
n[12] = 3,15
票数 0
EN

Stack Overflow用户

发布于 2015-08-06 12:28:21

Awk应该这样做:

代码语言:javascript
运行
复制
$ cat file
10 0,12 10 1,14 10 2,63 20 0,12 20 1,98 20 3,15
$ awk '{for(i=1; i<=NF; i+=2) a[$i]=$(i+1); for(k in a) print k, a[k]}' file
10 2,63
20 3,15

或者,如果文件采用不同的格式:

代码语言:javascript
运行
复制
$ cat file
10 0,12
10 1,14
10 2,63
20 0,12
20 1,98
20 3,15
$ awk '{a[$1]=$2}END{for (i in a) print i, a[i]}' file
10 2,63
20 3,15
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31855214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档