我有一个具有以下输入的文件:
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。我一直在努力,但我没能做到。
我很感激你能给我的任何建议来解决这个问题。
致以问候。
发布于 2015-08-06 13:16:43
只需将当前的第一个字段与前一个字段进行比较。如果它们不匹配,则打印前一行:
$ awk 'prev && id!=$1 {print prev} {prev=$0; id=$1} END {print prev}' a
10 2,63
20 3,15
发布于 2015-08-06 12:10:55
你总是有10 x 10 x 10 x 20 x 20 x 20 x
吗?
如果始终具有此架构,则可以将信息拆分为如下空格:
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]}'
这个数组里面是什么?
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
发布于 2015-08-06 12:28:21
Awk应该这样做:
$ 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
或者,如果文件采用不同的格式:
$ 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
https://stackoverflow.com/questions/31855214
复制相似问题