linux shell 计算排序awk,sort OR uniq!

喜欢坏女人的男人2022-10-04 11:39:541条回答

linux shell 计算排序awk,sort OR uniq!
我有一个文本,内容大致如下:
1 2 3 .
1 2 4 .
1 4 7 .
1 4 8 .
1 3 5 .
1 3 6 .
[.]表示一系列数据.
我的目标是根据第一个第二个数字来计算排序,如果一二号相等,就吧其他值平均,然后根据一二号排序.比如我想要的结果如下
1 2 3.5 .
1 3 5.5 .
1 4 7.5 .
怎么写shell脚本操作?

已提交,审核后显示!提交回复

共1条回复
northming 共回答了19个问题 | 采纳率89.5%
是这样吗:
[seesea@UC ]$ cat file
1 2 3 2
1 2 4 2
1 4 7 2
1 4 8 2
1 3 5 2
1 3 6 2
[seesea@UC ]$ awk '{count[$1" "$2]++; for(i=3; i<=NF; ++i) sum[$1" "$2,i]+=$i} END{for(i in count) { printf i; for(j=3; j<=NF; ++j) {printf OFS sum[i,j]/count[i]} print "" }}' file
1 2 3.5 2
1 3 5.5 2
1 4 7.5 2
1年前

相关推荐

linux shell 命令求解
linux shell 命令求解
1.查找命令的历史记录,将所有包含“rm”或“rmdir”的命令过滤出来,并将其保存在文件rmrecord中,要求在文件的末尾附上过滤的时间和日期。
2.利用管道组合命令来实现如下功能:a.对在线人数的自动统计,b.对来自特定ip段的用户进行过滤。
lanshuiyou1年前1
mmfine 共回答了22个问题 | 采纳率90.9%
1.history|awk '{ if ($2 == "rm" || $2 == "rmdir") print $0 }' > rmrecord.`date "+%Y%m%d-%H%M%S"`
2.
a. w | wc -l
b. w|grep -v 192.168.0.1|wc -l
Linux Shell问题6) 在Red Hat Enterprise Linux 4.0系统中,“run.sh”是Sh
Linux Shell问题
6) 在Red Hat Enterprise Linux 4.0系统中,“run.sh”是Shell执行脚本,在执行./run.sh file1 file2
file3的命令的过程中,变量$1的值为( )。(选择一项)
a) run.sh
b)
file1
c) file2
d) file3
读过六年1年前1
不重不重不重 共回答了13个问题 | 采纳率92.3%
选择b
shell中命令行参数:$0表示脚本名,$1-$9表示后面的参数
linux shell echo GUESS_IPV4_IF=$(ip route show | grep defaul
linux shell echo GUESS_IPV4_IF=$(ip route show | grep default | head -1 | sed -r 's/.+dev ([^ ]+
echo
GUESS_IPV4_IF=$(ip route show | grep default | head -1 | sed -r 's/.+dev ([^ ]+) .+/1/')
GUESS_PRIMARY_IPV4=$(ip addr show primary | grep "inet " | awk '{print $2}' | sed -r 's//[0-9]+$//' | tail -1)
gu7xia1年前1
海飞雪 共回答了16个问题 | 采纳率81.3%
1) echo 输出一个空行
2) GUESS_IPV4_IF=$(ip route show | grep default | head -1 | sed -r 's/.+dev ([^ ]+) .+/1/')
将本机默认网关 和 网卡赋值给GUESS_IPV4_IF变量(例如:default via 192.168.2.1 dev eth0 默认网关为192.168.2.1 网卡为 eth0)
3) GUESS_PRIMARY_IPV4=$(ip addr show primary | grep "inet " | awk '{print $2}' | sed -r 's//[0-9]+$//' | tail -1) 将本机的ip地址赋值给GUESS_PRIMARY_IPV4变量(例如:192.168.2.92)
问一个LINUX SHELL的查询问题.
问一个LINUX SHELL的查询问题.
源文件如下:
1|rtyu|dddddcccccc|adf
2|flaaa|ikea8fferf4|53kkkjs
1|rtyu|eeeeeeeee|adf
2|flaaa|ikea8fferf4|53kkkjs
2|flaaa|ikea8fffe4|53kkkjs
3|tuyiw|56564aaa4|uuiwe5
3|tuyiw|56rtetert4|uuiwe5
4|673|aabss5555cc|aaf
1|aaf|45dddf89aa|asdfasdf
2|kjkkoa|aadff|34fg
1|aaf|456789aa|asdfasdf
2|kjkkoa|aadff|34fg
3|tuyiw|56rtret4|uuiwe5
我想在源文件中其中找的关键字是“eeeeeeeee”,并将这一行找出来,同时,把这一行的下面几行也打印出来,直至到“1|aaf|456789aa|asdfasdf”结束。
所有被查询的关键字均在1|这一行中,且唯一。
1|rtyu|eeeeeeeee|adf
2|flaaa|ikea8fferf4|53kkkjs
2|flaaa|ikea8fffe4|53kkkjs
3|tuyiw|56564aaa4|uuiwe5
3|tuyiw|56rtetert4|uuiwe5
4|673|aabss5555cc|aaf
优雅DEii1年前1
sarindayang 共回答了11个问题 | 采纳率90.9%
grep 命令就可以
grep eeeeeeeee FileName -A 5
Linux shell正则表达式的问题
Linux shell正则表达式的问题
关于sed命令中使用正则表达式,我有以下一些疑问.
这里有两个例子.
$ echo this is an example | sed 's/w+/[&]/g'
[this] [is] [an] [example]
$ echo seven EIGHT | sed 's/([a-z]+) ([A-Z]+)/2 1/'
EIGHT seven
我的问题是,在这两个例子中,+的前面都有一个,而如果去掉了这个,sed命令的匹配是不成立的.
$ echo this is an example | sed 's/w+/[&]/g'
this is an example
而在egrep命令中,则并非如此.
$ egrep this is an example | egrep -o " [a-z]+ "
this
is
an
example
想问问,符号在sed命令中的作用是什么呢?为什么会这样呢?
dandan09201年前1
流浪人丁 共回答了14个问题 | 采纳率85.7%
w+的意思是数字和字母的字串
而你后一个用的是[a-z]+小写字母的字串
其实上面那个w ,你也可以写成[a-zA-Z0-9_]+
效果是一样的
求一道linux shell脚本题目的解答 查找一个文件夹下所有文件,比较文件内容,删除同样的文件
求一道linux shell脚本题目的解答 查找一个文件夹下所有文件,比较文件内容,删除同样的文件
文件夹路径是shell脚本的参数,如果两个regular file内容相同,则保留字母顺序靠前的一个,删除另一个。(比如文件A和文件B内容相同,则删除B)
asdfhdkfjgsd1年前1
说这话一定要MJ 共回答了21个问题 | 采纳率90.5%
ls $1 | xargs -n1 -i -r md5sum {} | sort | awk -v tmp='' '{if(tmp==$1) system("rm -f "$2); tmp=$1;}'
我写的脚本有问题吗? 怎么还不给最佳答案,郁闷了!虽然就写了一行,题目太简单了!
ok 了,shell是很灵活强大的,我写的可能不是最简单的方法,LZ多用用就会熟练的。
linux shell 脚本 求任意10个数的最大值。(使用数组)
我是她的她1年前1
avjfa 共回答了18个问题 | 采纳率100%
#!/bin/bash
aa=(23 345 55 56 -3456 4 678 90 9 1133)
max=${aa[0]}
for((i=1;i