免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 7556 | 回复: 49
打印 上一主题 下一主题

谁能帮我处理如下的文件?(以文件的某一行排序后重组)谢谢了!!  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-16 19:50 |只看该作者 |倒序浏览
第一个文件是以含“NUM=”的行来排序,如下
TOOLS {
    NUM=1
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=12
    DRILL_SIZE=17.71653543307087
    SLOT_LENGTH=0
}

TOOLS {
    NUM=2
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=28
    DRILL_SIZE=33.46456692913386
    SLOT_LENGTH=0
}

TOOLS {
    NUM=3
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=22
    DRILL_SIZE=27.55905511811024
    SLOT_LENGTH=0
}

TOOLS {
    NUM=4
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=40
    DRILL_SIZE=45.2755905511811
    SLOT_LENGTH=0
}

TOOLS {
    NUM=5
    SHAPE=HOLE
    TYPE=NON_PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=35
    DRILL_SIZE=41.33858267716536
    SLOT_LENGTH=0
}
第二个文件要以含“DRILL_SIZE=”来排序,并重组“NUM=”的那行,效果如下
TOOLS {
    NUM=1
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=12
    DRILL_SIZE=17.71653543307087
    SLOT_LENGTH=0
}

TOOLS {
    NUM=2
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=22
    DRILL_SIZE=27.55905511811024
    SLOT_LENGTH=0
}

TOOLS {
    NUM=3
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=28
    DRILL_SIZE=33.46456692913386
    SLOT_LENGTH=0
}

TOOLS {
    NUM=4
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=35
    DRILL_SIZE=41.33858267716536
    SLOT_LENGTH=0
}

TOOLS {
    NUM=5
    SHAPE=HOLE
    TYPE=NON_PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=40
    DRILL_SIZE=45.2755905511811
    SLOT_LENGTH=0
}
谢谢老大了!

论坛徽章:
0
2 [报告]
发表于 2005-11-16 20:08 |只看该作者
好像只用awk有点不够用,awk的排序函数还不太会用,有哪位老大有好的思路?

论坛徽章:
0
3 [报告]
发表于 2005-11-16 22:07 |只看该作者
  1. cat -n file |sed -n '/.\{2\}\..\{10,\}$/p' | sort -t"=" -k2 | cut -f1 | xargs -i awk 'NR>{}- 10&&NR<{}+3{print}' file >tmp
复制代码


  1. seq 1 5 |xargs -i echo "NUM={}"|xargs -i  sed 's/NUM\=[1-5]\{1\}$/{}/' tmp | awk '{k=0;while(k<6){if(NR < 60*k
  2. + 12*k +13  && NR > 60*k + 12*k ){print;}k++;}}'
复制代码








$ seq 1 5 |xargs -i echo "NUM={}"|xargs -i  sed 's/NUM\=[1-5]\{1\}$/{}/' tmp | awk '{k=0;while(k<6){if(NR < 60*k + 12*k +13  && NR > 60*k + 12*k ){print;}k++;}}'
TOOLS {
    NUM=1
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=12
    DRILL_SIZE=17.71653543307087
    SLOT_LENGTH=0
}
TOOLS {
    NUM=2
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=22
    DRILL_SIZE=27.55905511811024
    SLOT_LENGTH=0
}
TOOLS {
    NUM=3
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=28
    DRILL_SIZE=33.46456692913386
    SLOT_LENGTH=0
}
TOOLS {
    NUM=4
    SHAPE=HOLE
    TYPE=NON_PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=35
    DRILL_SIZE=41.33858267716536
    SLOT_LENGTH=0
}
TOOLS {
    NUM=5
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=40
    DRILL_SIZE=45.2755905511811
    SLOT_LENGTH=0
}

[ 本帖最后由 dbcat 于 2005-11-16 22:26 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2005-11-16 22:14 |只看该作者
谢谢老大了,能不能大概解释一下思路,看的有点晕,^_^

论坛徽章:
0
5 [报告]
发表于 2005-11-16 22:21 |只看该作者
First,以含“DRILL_SIZE=”来排序:

  1. cat -n file |sed -n '/.{2}..{10,}$/p' | sort -t"=" -k2 | cut -f1 | xargs -i awk 'NR>{}- 10&&NR<{}+3{print}' file >tmp
复制代码


$cat tmp
TOOLS {
    NUM=1
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=12
    DRILL_SIZE=17.71653543307087
    SLOT_LENGTH=0
}
TOOLS {
    NUM=3
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=22
    DRILL_SIZE=27.55905511811024
    SLOT_LENGTH=0
}
TOOLS {
    NUM=2
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=28
    DRILL_SIZE=33.46456692913386
    SLOT_LENGTH=0
}
TOOLS {
    NUM=5
    SHAPE=HOLE
    TYPE=NON_PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=35
    DRILL_SIZE=41.33858267716536
    SLOT_LENGTH=0
}
TOOLS {
    NUM=4
    SHAPE=HOLE
    TYPE=PLATED
    TYPE2=STANDARD
    MIN_TOL=3.15
    MAX_TOL=3.15
    BIT=
    FINISH_SIZE=40
    DRILL_SIZE=45.2755905511811
    SLOT_LENGTH=0
}

Second,重组“NUM=”的那行a
  1. seq 1 5 |xargs -i echo "NUM={}"|xargs -i  sed 's/NUM=[1-5]{1}$/{}/' tmp | awk '{k=0;while(k<6){if(NR < 60*k + 12*k +13  && NR > 60*k + 12*k ){print;}k++;}}'
复制代码



****ps:Shell Code Too long

论坛徽章:
0
6 [报告]
发表于 2005-11-16 22:31 |只看该作者
seq 是什么命令?我用的c-shell,没见过seq,请老大指教!
代码实用就行^_^

论坛徽章:
0
7 [报告]
发表于 2005-11-16 22:35 |只看该作者
csh............
This script is for bash ^_^
$seq 1 5
1
2
3
4
5

In csh try:
??

[ 本帖最后由 dbcat 于 2005-11-16 22:36 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2005-11-16 22:53 |只看该作者
awk ' BEGIN { FS="[\n=]" ; RS=""} { print $3 } ' a | sort -n > c

for i in `cat c ` ; do

awk ' BEGIN { FS="[\n=]" ; RS=""} { a[$3]=$0 } END { print a['$i'] }  ' a

done

-------------------

如果 num 有相同的就不行了、、、,

[[i] 本帖最后由 技安 于 2005-11-16 22:55 编辑 [/i]]

论坛徽章:
0
9 [报告]
发表于 2005-11-16 22:59 |只看该作者
晕、我。。。。。。。。。。。。还以为、第一个文件,也是乱的呢。

论坛徽章:
0
10 [报告]
发表于 2005-11-16 23:08 |只看该作者
awk -F= ' $1 ~ /DRILL_SIZE/ { print $2 } ' a | sort -n > c

for i in ` cat c ` ; do

awk ' BEGIN { FS="[\n=]" ; RS=""} {  a[$19]=$0 } END { print a["'$i'"] } ' a

done

[[i] 本帖最后由 技安 于 2005-11-16 23:09 编辑 [/i]]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP