分页: 1 / 3
求脚本!!!!
发表于 : 2011-08-02 12:34
由 killer2001
小弟有一文件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
Re: 求脚本!!!!
发表于 : 2011-08-02 12:46
由 sevk
不就是读取 a.dat 并过滤嘛, bash直接执行ruby一行代码:
代码: 全选
ruby -e "p File.read('a.dat').scan(/.+=(.+)$/)"
打印结果:
[["compt_a"], ["compt_b "], ["compt_c"]]
Re: 求脚本!!!!
发表于 : 2011-08-02 12:51
由 sevk
转化成大写:
代码: 全选
ruby -e "p File.read('a.dat').scan(/.+=(.+)$/).map{|x| x[0].upcase}"
输出:
代码: 全选
["COMPT_A", "COMPT_B ", "COMPT_C"]
Re: 求脚本!!!!
发表于 : 2011-08-02 13:06
由 killer2001
谢谢,我不会rubby
机子上没装rubby,也没权限装,还有别的方法吗?
[uidt5109@jz002 home]$ rubby
-bash: rubby: command not found
Re: 求脚本!!!!
发表于 : 2011-08-02 13:08
由 killer2001
[uidt5109@jz002 home]$ ruby
-bash: ruby: command not found
Re: 求脚本!!!!
发表于 : 2011-08-02 17:41
由 sk1418
代码: 全选
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"
Re: 求脚本!!!!
发表于 : 2011-08-02 22:48
由 fnan
tr a-z A-Z <a.dat|sed ':a;N;s/\n*Y[0-9]*=/","/g;s/^",/ss=/;s/$/"/;ta'
Re: 求脚本!!!!
发表于 : 2011-08-02 23:39
由 eexpress
lz自己写的,没啥问题。多调试,多echo就是。
Re: 求脚本!!!!
发表于 : 2011-08-02 23:58
由 fnan
lz的方法也可以啊,不过有些细节不易想到,先不写出来。
Re: 求脚本!!!!
发表于 : 2011-08-03 7:33
由 cuihao
既然有人用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')])"
Re: 求脚本!!!!
发表于 : 2011-08-03 22:30
由 fnan
用变量:
ss='';for i in `tr a-z A-Z <a.dat|cut -d= -f2`;do ss=${ss:+$ss'","'}$i;done;echo 'ss="'$ss'"'
Re: 求脚本!!!!
发表于 : 2011-08-04 0:20
由 我就是我2
这么多人写。有压力啊。
不会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]
Re: 求脚本!!!!
发表于 : 2011-08-04 2:46
由 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)'"'
Re: 求脚本!!!!
发表于 : 2011-08-04 8:41
由 killer2001
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]$
Re: 求脚本!!!!
发表于 : 2011-08-04 8:45
由 killer2001
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]$