批处理之家's Archiver

dingniu2 发表于 2020-3-20 23:33

请教批量处理特定字符内容数值带文件名排序问题

请教一个问题:一个文件夹中有一些文件aaaa、bbbb等,每个文件内容中都有几个(\VR=数值\)这样的形式,如下图:
[attach]12430[/attach]
我的目的是将这些文件从后往前数,第一次出现的(\VR=数值\)中的数值进行排序,最重要的是要显示这些数值来自的文件名,目标如下图:
[attach]12431[/attach]
想通过一些简单的命令如:for循环 ,grep, awk,  sed, sort等组合来解决 。这个问题不容易解决,谢谢大家!!!!

Gin_Q 发表于 2020-3-21 10:28

批处理,还是shell。不要混淆!

Gin_Q 发表于 2020-3-21 10:30

把原文件打包上来看看!

dingniu2 发表于 2020-3-21 11:01

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=227342&ptid=55129]3#[/url] [i]Gin_Q[/i] [/b]
非常感谢关注,我即刻上传文件。

dingniu2 发表于 2020-3-21 11:07

非常感谢你的关注。我帖子之前说的比较繁琐,我已将问题替换为:有个文件夹下由aaa、bbbb、cccc.....等文件。这些文件内容中都不只一次出现VOL Sert:并在其所在的行出现唯一等号= 。等号后空两格有一串数值,这个数值小数点不一定在哪,但都是由12个数字、一个小数点.、一个负号-组成。请见附件aaaa、bbbb、cccc。我的目的是想用sed、for、awk、 sort等组合命令将每个文件倒数第一个VOL Sert:这行等号后的这个数值提取从小到大排序,最重要的是显示每个数值来自的文件名。请见附件jieguo。这个问题好久都没解决,可能有点难,非常感谢!!!谢谢!!!
[attach]12432[/attach]
[attach]12433[/attach]
[attach]12434[/attach]
[attach]12435[/attach]

dingniu2 发表于 2020-3-21 11:11

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=227343&ptid=55129]4#[/url] [i]dingniu2[/i] [/b]
专家,问题的新描述以及相关txt文件已上传,感谢!!!

Gin_Q 发表于 2020-3-21 11:45

[i=s] 本帖最后由 Gin_Q 于 2020-3-21 13:02 编辑 [/i]

[code]#!/bin/bash
rm -f result.txt result1.txt 2>/dev/null
for a in `ls *.txt`
do
        grep -o -E "\-[0-9]{1,12}.[0-9]{1,12}" $a | awk -v fname=$a '{printf "%s %s\n",fname,$1}' 1>>result1.txt
done
sort -nr -t ' ' -k 2 result1.txt 1>result.txt
rm -f result1.txt
[/code][code]cccc.txt -5.65679881107
cccc.txt -23.8882046924
aaaa.txt -56.5589881107
bbbb.txt -268.882046924
aaaa.txt -2603.82046924
bbbb.txt -5655.89881107
[/code]

dingniu2 发表于 2020-3-21 13:07

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=227346&ptid=55129]7#[/url] [i]Gin_Q[/i] [/b]
高手,多谢!!!还有一个难点,就是如何只排列每个文件倒数第一个VOL Sert:这行等号后的这个数值?不要除倒数第一个数值以外的其它值?就差这一步,万分感谢!!!!

dingniu2 发表于 2020-3-21 13:27

[quote]
[size=2][color=#999999]Gin_Q 发表于 2020-3-21 11:45[/color] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=227346&ptid=55129][img]http://www.bathome.net/images/common/back.gif[/img][/url][/size][/quote]
大神,还是不行,我发了3个待处理文件,其它文件也都有VOL Sert:行,对这行规律都一样,但是行间可能有其它干扰行,也就是VOL Sert:行不确定出现在哪行,我以为编写脚本可以寻找VOL Sert:行的=后空两格的数?我发了更具特殊性的dddd,请大神帮忙取倒数第一个VOL Sert:行对应的数值排序。这个还是有难度,万分感谢!!!
[attach]12436[/attach]

Gin_Q 发表于 2020-3-21 14:13

还有一个难点我没有明白你的意思![code]#!/bin/bash
rm -f result.txt result1.txt 2>/dev/null
for a in `ls *.txt`
do
        grep -o -E "[[:space:]]{2}-[0-9]{1,12}.[0-9]{1,12}[[:space:]]{2}" $a | awk -v fname=$a '{printf "%s %s\n",fname,$1}' 1>>result1.txt
done
sort -nr -t ' ' -k 2 result1.txt 1>result.txt
rm -f result1.txt

[/code][code]cccc.txt -5.65679881107
dddd.txt -9.63598741107
cccc.txt -23.8882046924
aaaa.txt -56.5589881107
dddd.txt -65.8839646924
bbbb.txt -268.882046924
aaaa.txt -2603.82046924
bbbb.txt -5655.89881107
[/code]

dingniu2 发表于 2020-3-21 14:51

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=227354&ptid=55129]10#[/url] [i]Gin_Q[/i] [/b]
谢谢大神回复,还有一个难点问题没解决,就是只要对每个文件倒数第一个VOL Sert:后那个数值排序,大神你的脚本是对所有VOL Sert:后那个数值排序,我尝试改你的脚本但没成功,请大神赐教,万分感谢!!!!

Gin_Q 发表于 2020-3-21 15:10

[i=s] 本帖最后由 Gin_Q 于 2020-3-21 15:12 编辑 [/i]

我对shell了解不多,你应该多学学linux三剑客
排序文本最后一次匹配到的数据[code]#!/bin/bash
rm -f result.txt result1.txt 2>/dev/null
for a in `ls *.txt`
do
        for b in `grep -o -E "[[:space:]]{2}-[0-9]{1,12}.[0-9]{1,12}[[:space:]]{2}" $a`
        do
                temp=$b
        done
        echo $temp |awk -v fname=$a '{printf "%s %s\n",fname,$1}' 1>>result1.txt
done
sort -nr -t ' ' -k 2 result1.txt 1>result.txt
rm -f result1.txt

        #grep -o -E "[[:space:]]{2}-[0-9]{1,12}.[0-9]{1,12}[[:space:]]{2}" $a | tac n 1 |awk -v fname=$a '{printf "%s %s\n",fname,$1}' 1>>result1.txt[/code][code]cccc.txt -23.8882046924
dddd.txt -65.8839646924
bbbb.txt -268.882046924
aaaa.txt -2603.82046924
[/code]

dingniu2 发表于 2020-3-21 15:18

[quote]我对shell了解不多,你应该多学学linux三剑客
排序文本最后一次匹配到的数据
[size=2][color=#999999]Gin_Q 发表于 2020-3-21 15:10[/color] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=227357&ptid=55129][img]http://www.bathome.net/images/common/back.gif[/img][/url][/size][/quote]
感谢感谢!我学了一段时间了,感觉这东西难度较大。问一句题外话,你见多识广,能用一行命令批量在一堆txt文件中的从上往下数第三个空行插入abcd四个字符吗?(这一堆txt文件空行位置和数目都不一致)

Gin_Q 发表于 2020-3-21 15:26

在第四行前面第三行下面[code]sed.exe -i '4i abcd' aaaa.txt[/code]

dingniu2 发表于 2020-3-21 15:41

[quote]在第四行前面第三行下面
[size=2][color=#999999]Gin_Q 发表于 2020-3-21 15:26[/color] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=227360&ptid=55129][img]http://www.bathome.net/images/common/back.gif[/img][/url][/size][/quote]
这个简单的我会,我那个问题是在第三个空行插入abcd。这些文件第三个空行说不定在那行。我有个思路是这样的:先把这个文件夹所有的文件中空行的行号提出来,然后有了第三个空行的行号就可以在这个行号处加abcd。应该一个不是很复杂的命令,但没写成功。

Gin_Q 发表于 2020-3-21 15:55

你的方法可以
给你个查找空行的方法,剩下的自己想办法咯![code]grep -n -E "^$" aaaa.txt[/code]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.