求脚本!!!!

sh/bash/dash/ksh/zsh等Shell脚本
killer2001
帖子: 16
注册时间: 2010-07-09 20:28

求脚本!!!!

#1

帖子 killer2001 » 2011-08-02 12:34

小弟有一文件a.dat:
..........
y1=compt_a
y2=compt_b
y3=compt_c
...................
想得到字符串ss="COMPT_A","COMPT_B","COMPT_C"
小弟试了很久,未成功,求帮助。
ss=""
for each in `cat a.dat |grep "compt" | cut -d"=" -f2 |tr a-z A-Z`
do
echo $each
ss=\"$ss\",\"$each\"
done
头像
sevk
帖子: 2060
注册时间: 2007-05-08 16:26
系统: arch
来自: 火星内核某分子内某原子核内
联系:

Re: 求脚本!!!!

#2

帖子 sevk » 2011-08-02 12:46

不就是读取 a.dat 并过滤嘛, bash直接执行ruby一行代码:

代码: 全选

ruby -e "p File.read('a.dat').scan(/.+=(.+)$/)"

打印结果:
[["compt_a"], ["compt_b "], ["compt_c"]]
笔记本 :
F208S : gentoo
A460P i3G D6 : UBUNTU + WIN7
UN43D1 : UBUNTU + WIN7
1000人超级QQ群 LINUX + WIN : 31465544 或 18210387
头像
sevk
帖子: 2060
注册时间: 2007-05-08 16:26
系统: arch
来自: 火星内核某分子内某原子核内
联系:

Re: 求脚本!!!!

#3

帖子 sevk » 2011-08-02 12:51

转化成大写:

代码: 全选

ruby -e "p File.read('a.dat').scan(/.+=(.+)$/).map{|x| x[0].upcase}"
输出:

代码: 全选

["COMPT_A", "COMPT_B ", "COMPT_C"]
笔记本 :
F208S : gentoo
A460P i3G D6 : UBUNTU + WIN7
UN43D1 : UBUNTU + WIN7
1000人超级QQ群 LINUX + WIN : 31465544 或 18210387
killer2001
帖子: 16
注册时间: 2010-07-09 20:28

Re: 求脚本!!!!

#4

帖子 killer2001 » 2011-08-02 13:06

谢谢,我不会rubby
机子上没装rubby,也没权限装,还有别的方法吗?

[uidt5109@jz002 home]$ rubby
-bash: rubby: command not found
killer2001
帖子: 16
注册时间: 2010-07-09 20:28

Re: 求脚本!!!!

#5

帖子 killer2001 » 2011-08-02 13:08

[uidt5109@jz002 home]$ ruby
-bash: ruby: command not found
sk1418
帖子: 229
注册时间: 2007-07-01 17:36
系统: (En):System
来自: (En):address
联系:

Re: 求脚本!!!!

#6

帖子 sk1418 » 2011-08-02 17:41

代码: 全选

kent$  echo "y1=compt_a
y2=compt_b
y3=compt_c"|sed -r -e's/=/="/' -e 's/$/"/'|awk -F'=' '{a[NR]=$2}END{for(i in a) x = x a[i]; gsub(/""/,"\",\"",x); print "var=" toupper(x)}'
输出:
var="COMPT_A","COMPT_B","COMPT_C"
---
regards,

Kent
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求脚本!!!!

#7

帖子 fnan » 2011-08-02 22:48

tr a-z A-Z <a.dat|sed ':a;N;s/\n*Y[0-9]*=/","/g;s/^",/ss=/;s/$/"/;ta'
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 求脚本!!!!

#8

帖子 eexpress » 2011-08-02 23:39

lz自己写的,没啥问题。多调试,多echo就是。
● 鸣学
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求脚本!!!!

#9

帖子 fnan » 2011-08-02 23:58

lz的方法也可以啊,不过有些细节不易想到,先不写出来。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
联系:

Re: 求脚本!!!!

#10

帖子 cuihao » 2011-08-03 7:33

既然有人用ruby,我也用一用Python2:

代码: 全选

print 'ss="%s"' % '","'.join([line.split(‘=’)[1].strip().upper() for line in open('a.dat')])
单一命令:

代码: 全选

python2 -c "print 'ss=\"%s\"' % '\",\"'.join([line.split('=')[1].strip().upper() for line in open('a.dat')])"
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求脚本!!!!

#11

帖子 fnan » 2011-08-03 22:30

用变量:
ss='';for i in `tr a-z A-Z <a.dat|cut -d= -f2`;do ss=${ss:+$ss'","'}$i;done;echo 'ss="'$ss'"'
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 求脚本!!!!

#12

帖子 我就是我2 » 2011-08-04 0:20

这么多人写。有压力啊。 :em06
不会ruby、python
[bash]data=$(grep "compt" a.dat | awk -F "=" '{print "\"" $2 "\"," }' | tr a-z A-Z | tr -d '\n' | sed 's/,$//')
echo "ss=$data"
[/bash]
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求脚本!!!!

#13

帖子 fnan » 2011-08-04 2:46

花样翻新,很high的。
用变量直接打印:
ss='';for i in `cut -d= -f2 <1|tr a-z A-Z`;do echo -n ${ss:-'ss="'}${ss:+'","'};ss=$i;done;echo $ss'"'
用sed的简洁方法:
sed 's/ /","/g' <<<'ss="'$(cut -d= -f2 <1|tr a-z A-Z)'"'
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
killer2001
帖子: 16
注册时间: 2010-07-09 20:28

Re: 求脚本!!!!

#14

帖子 killer2001 » 2011-08-04 8:41

fnan 写了:用变量:
ss='';for i in `tr a-z A-Z <a.dat|cut -d= -f2`;do ss=${ss:+$ss'","'}$i;done;echo 'ss="'$ss'"'

大哥,我这里不行啊?
[uidt5100@home]$ ss='';for i in `tr a-z A-Z <a.dat|cut -d= -f2`;do ss=${ss:+$ss'","'}$i;done;echo 'ss="'$ss'"'
","COMPT_C","
[uidt5100@home]$
killer2001
帖子: 16
注册时间: 2010-07-09 20:28

Re: 求脚本!!!!

#15

帖子 killer2001 » 2011-08-04 8:45

fnan 写了:花样翻新,很high的。
用变量直接打印:
ss='';for i in `cut -d= -f2 <1|tr a-z A-Z`;do echo -n ${ss:-'ss="'}${ss:+'","'};ss=$i;done;echo $ss'"'
用sed的简洁方法:
sed 's/ /","/g' <<<'ss="'$(cut -d= -f2 <1|tr a-z A-Z)'"'
这个也不行?
[uidt5100@home]$ ss='';for i in `cut -d= -f2 <a.dat|tr a-z A-Z`;do echo -n ${ss:-'ss="'}${ss:+'","'};ss=$i;done;echo $ss'"'
","COMPT_C","
[uidt5100@home]$
回复