请教提取文件倒数第一个特定字符后的数值并连同文件名排序的问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
dali999
帖子: 3
注册时间: 2020-03-21 10:02
系统: linux
送出感谢: 0
接收感谢: 0

请教提取文件倒数第一个特定字符后的数值并连同文件名排序的问题

#1

帖子 dali999 » 2020-03-21 13:50

请教一个问题:有个文件夹下由aaaaa、bb、ccc、.....等文件。这些文件内容中都不只一次出现VOL Sert:并在其所在的行出现唯一等号= 。等号后空两格有一串数值,这个数值小数点不一定在哪,但都是由12个数字、一个小数点.、一个负号-组成。请见附件aaaaa、bb、ccc。我的目的是想用sed、for、awk、 sort等组合命令将每个文件倒数第一个VOL Sert:这行等号后的这个数值提取从小到大排序,最重要的是显示每个数值来自的文件名。请见附件jieguo。这个问题好久都没解决,可能有点难,非常感谢!!!谢谢!!!
附件
jieguo.txt
jieguo
(67 Bytes) 下载 8 次
ccc.txt
ccc
(531 Bytes) 下载 2 次
bb.txt
bb
(371 Bytes) 下载 4 次
aaaaa.txt
aaaaa
(269 Bytes) 下载 6 次
头像
astolia
论坛版主
帖子: 4408
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 738 次

Re: 请教提取文件倒数第一个特定字符后的数值并连同文件名排序的问题

#2

帖子 astolia » 2020-03-21 14:26

想伸手要现成的?没门!也不觉得哪里难,给你些提示,自己想去

获取单一文件中包含VOL Sert:的行:grep "VOL Sert:" filename
获取倒数第一行:tail -n 1
提取数值:cut/awk
数值与文件对应:for filename in dir/*.txt; do echo $value $filename >> tmp.txt; done
排序:sort -n tmp.txt

这样结果就出来了,只不过数值在前文件名在后,需要调整的话再用个for循环交换就是
dali999
帖子: 3
注册时间: 2020-03-21 10:02
系统: linux
送出感谢: 0
接收感谢: 0

Re: 请教提取文件倒数第一个特定字符后的数值并连同文件名排序的问题

#3

帖子 dali999 » 2020-03-21 15:04

astolia 写了:
2020-03-21 14:26
想伸手要现成的?没门!也不觉得哪里难,给你些提示,自己想去

获取单一文件中包含VOL Sert:的行:grep "VOL Sert:" filename
获取倒数第一行:tail -n 1
提取数值:cut/awk
数值与文件对应:for filename in dir/*.txt; do echo $value $filename >> tmp.txt; done
排序:sort -n tmp.txt

这样结果就出来了,只不过数值在前文件名在后,需要调整的话再用个for循环交换就是
感谢你的回复,你的思路对我帮助很大,有效的帮我化简了步骤。现在有一个问题是我提取到那一行后,想用cut取数字,但是用cut如何取“这行的等号=后空两格之后的12个、一个负号-、一个小数点.”,像这样“VOL Sert: U(isje76) = -2715.14211782 P.l. after”取-2715.14211782?
dali999
帖子: 3
注册时间: 2020-03-21 10:02
系统: linux
送出感谢: 0
接收感谢: 0

Re: 请教提取文件倒数第一个特定字符后的数值并连同文件名排序的问题

#4

帖子 dali999 » 2020-03-21 16:28

astolia 写了:
2020-03-21 14:26
想伸手要现成的?没门!也不觉得哪里难,给你些提示,自己想去

获取单一文件中包含VOL Sert:的行:grep "VOL Sert:" filename
获取倒数第一行:tail -n 1
提取数值:cut/awk
数值与文件对应:for filename in dir/*.txt; do echo $value $filename >> tmp.txt; done
排序:sort -n tmp.txt

这样结果就出来了,只不过数值在前文件名在后,需要调整的话再用个for循环交换就是
你好,根据你的提示写出如下命令,结果每个文件名前显示了所有文件的数值,没有一一对应,这部分实在不会了,初学能否给些提示?谢谢!!
value=`for i in *.txt; do grep "VOL Sert:" $i | tail -n 1 | cut -d '=' -f 2 | cut -d 'A' -f 1; done` | for filename in *.log; do echo $value $filename >> tmp.txt; done
头像
astolia
论坛版主
帖子: 4408
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 738 次

Re: 请教提取文件倒数第一个特定字符后的数值并连同文件名排序的问题

#5

帖子 astolia » 2020-03-22 14:54

for filename in *.txt; do
value=`grep "VOL Sert:" $filename ...`
echo $value $filename >> tmp.txt;
done
回复

回到 “Shell脚本”