求助:shell脚本编程统计文本A.txt中的信息

sh/bash/dash/ksh/zsh等Shell脚本
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: 求助:shell脚本编程统计文本A.txt中的信息

#16

帖子 astolia » 2010-09-29 14:40

既然你可以用c++实现,那么最简单的:

代码: 全选

#! /bin/sh -
echo '#include<iostream>
using namespace std;
int main() {cout<<"modify me"<<endl;}' > /tmp/code.cpp
g++ -o /tmp/code /tmp/code.cpp
/tmp/code
rm /tmp/code /tmp/code.cpp
把echo后面的换成你c++的代码就是了 :em04
hanyu120
帖子: 18
注册时间: 2010-09-28 20:24

Re: 求助:shell脚本编程统计文本A.txt中的信息

#17

帖子 hanyu120 » 2010-09-29 17:39

astolia 写了:既然你可以用c++实现,那么最简单的:

代码: 全选

#! /bin/sh -
echo '#include<iostream>
using namespace std;
int main() {cout<<"modify me"<<endl;}' > /tmp/code.cpp
g++ -o /tmp/code /tmp/code.cpp
/tmp/code
rm /tmp/code /tmp/code.cpp
把echo后面的换成你c++的代码就是了 :em04
我是想用shell编程实现,而不是停留在C++的层面上,还请大虾帮帮忙。前面几位大虾提出了好多方法,但都有些问题,还请你费心,帮我实现
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 求助:shell脚本编程统计文本A.txt中的信息

#18

帖子 aerofox » 2010-09-30 14:17

用 awk 就可以了。

代码: 全选

#!/usr/bin/awk -f
$1~/A$/	{
	    A[$2] = A[$2] " " $1
	    M[$2]++
	}
$1~/B$/	{
	    B[$2] = B[$2] " " $1
	    N[$2]++
	}
END	{
	    print "A 链:"
	    for(i in A) {
		print M[i], i A[i]
	    }
	    print "B 链:"
	    for(i in B) {
		print N[i], i B[i]
	    }
	}
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: 求助:shell脚本编程统计文本A.txt中的信息

#19

帖子 astolia » 2010-09-30 23:44

我发个没用awk的。只有grep、cut、head、tail

代码: 全选

~$ cat A.txt 
Residue Structure
1A H
2A H
3A K
4A K
5A K
6A S
1B I
2B I
3B E
4B E
5B E
程序a.sh如下 :em04 保证让你学到东西,而不是直接拿去应付老师

代码: 全选

# /bin/bash -
eval `printf '\164\145\170\164\075\140\143\141\164\040\101\056\164\170\164\140\073\146\157\162\040\146\040\151\156\040\101\040\102\073\144\157\040\143\150\141\151\156\075\140\145\143\150\157\040\042\044\164\145\170\164\042\174\147\162\145\160\040\055\105\040\042\136\133\060\055\071\135\053\044\146\042\140\073\151\146\040\133\040\055\156\040\042\044\143\150\141\151\156\042\040\135\073\164\150\145\156\040\145\143\150\157\040\042\044\146\351\223\276\042\073\145\143\150\157\040\042\116\165\155\142\145\162\040\123\164\162\165\143\164\165\162\145\040\123\164\141\162\164\137\122\145\163\151\144\165\145\137\111\104\040\105\156\144\137\122\145\163\151\144\165\145\137\111\104\042\073\151\075\061\073\154\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\150\145\141\144\040\055\156\040\061\140\073\167\150\151\154\145\040\133\040\055\156\040\042\044\154\042\040\135\073\144\157\040\143\150\162\075\140\145\143\150\157\040\044\154\174\147\162\145\160\040\055\157\040\042\056\044\042\140\073\144\141\164\141\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\147\162\145\160\040\042\044\143\150\162\044\042\140\073\145\143\150\157\040\042\044\151\040\044\143\150\162\040\140\145\143\150\157\040\042\044\144\141\164\141\042\174\150\145\141\144\040\055\156\040\061\174\143\165\164\040\055\146\061\040\055\144\047\040\047\140\040\140\145\143\150\157\040\042\044\144\141\164\141\042\174\164\141\151\154\040\055\156\040\061\174\143\165\164\040\055\146\061\040\055\144\047\040\047\140\042\073\143\150\141\151\156\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\147\162\145\160\040\055\166\040\042\044\143\150\162\044\042\140\073\154\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\150\145\141\144\040\055\156\040\061\140\073\151\075\044\050\050\044\151\053\061\051\051\073\144\157\156\145\073\146\151\073\144\157\156\145\012'`
执行效果

代码: 全选

~$ ./a.sh 
A链
Number Structure Start_Residue_ID End_Residue_ID
1 H 1A 2A
2 K 3A 5A
3 S 6A 6A
B链
Number Structure Start_Residue_ID End_Residue_ID
1 I 1B 2B
2 E 3B 5B
PS.顺便把我们短消息中关于第一问的解法贴在这里。

代码: 全选

#! /bin/sh
for chr in H B E G I T S ' ';do
    lines=`cat A.txt | grep -E "^[0-9]+[AB] $chr$"`
    test -z "$lines" && eval "$chr"_num=0 || eval "$chr"_num=`echo "$lines" | wc -l`
done
echo "H B E G I T S  
$H_num $B_num $E_num $G_num $I_num $T_num $S_num $_num" > B.txt
hanyu120
帖子: 18
注册时间: 2010-09-28 20:24

Re: 求助:shell脚本编程统计文本A.txt中的信息

#20

帖子 hanyu120 » 2010-10-01 13:59

代码: 全选

# /bin/bash -
eval `printf '\164\145\170\164\075\140\143\141\164\040\101\056\164\170\164\140\073\146\157\162\040\146\040\151\156\040\101\040\102\073\144\157\040\143\150\141\151\156\075\140\145\143\150\157\040\042\044\164\145\170\164\042\174\147\162\145\160\040\055\105\040\042\136\133\060\055\071\135\053\044\146\042\140\073\151\146\040\133\040\055\156\040\042\044\143\150\141\151\156\042\040\135\073\164\150\145\156\040\145\143\150\157\040\042\044\146\351\223\276\042\073\145\143\150\157\040\042\116\165\155\142\145\162\040\123\164\162\165\143\164\165\162\145\040\123\164\141\162\164\137\122\145\163\151\144\165\145\137\111\104\040\105\156\144\137\122\145\163\151\144\165\145\137\111\104\042\073\151\075\061\073\154\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\150\145\141\144\040\055\156\040\061\140\073\167\150\151\154\145\040\133\040\055\156\040\042\044\154\042\040\135\073\144\157\040\143\150\162\075\140\145\143\150\157\040\044\154\174\147\162\145\160\040\055\157\040\042\056\044\042\140\073\144\141\164\141\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\147\162\145\160\040\042\044\143\150\162\044\042\140\073\145\143\150\157\040\042\044\151\040\044\143\150\162\040\140\145\143\150\157\040\042\044\144\141\164\141\042\174\150\145\141\144\040\055\156\040\061\174\143\165\164\040\055\146\061\040\055\144\047\040\047\140\040\140\145\143\150\157\040\042\044\144\141\164\141\042\174\164\141\151\154\040\055\156\040\061\174\143\165\164\040\055\146\061\040\055\144\047\040\047\140\042\073\143\150\141\151\156\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\147\162\145\160\040\055\166\040\042\044\143\150\162\044\042\140\073\154\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\150\145\141\144\040\055\156\040\061\140\073\151\075\044\050\050\044\151\053\061\051\051\073\144\157\156\145\073\146\151\073\144\157\156\145\012'`
大虾,你的程序代码我研究了下,发现不能解决如下的例子,可能是我一开始没说清楚,麻烦了!
cat A.txt
Residue Structure
1A H
2A H
3A K
4A K
5A H
6A H
1B I
2B I
3B E
4B E
5B S
要求分析结果:
B.txt
A链
Number Structure Start_Residue_ID End_Residue_ID
1 H 1A 2A
2 K 3A 5A
3 H 5A 6A
B链
Number Structure Start_Residue_ID End_Residue_ID
1 I 1B 2B
2 E 3B 4B
3 S 5A 5A
上次由 hanyu120 在 2010-10-01 21:46,总共编辑 2 次。
hanyu120
帖子: 18
注册时间: 2010-09-28 20:24

Re: 求助:shell脚本编程统计文本A.txt中的信息

#21

帖子 hanyu120 » 2010-10-01 15:23

多谢各位大虾的无私帮助,我会好好学习shell脚本编程的,我买了《高级BASH脚本编程指南》,我先前有一点点shell基础,希望这个学期有所收获。再次感谢各位
hanyu120
帖子: 18
注册时间: 2010-09-28 20:24

Re: 求助:shell脚本编程统计文本A.txt中的信息

#22

帖子 hanyu120 » 2010-10-01 21:43

代码: 全选

# /bin/bash -
eval `printf '\164\145\170\164\075\140\143\141\164\040\101\056\164\170\164\140\073\146\157\162\040\146\040\151\156\040\101\040\102\073\144\157\040\143\150\141\151\156\075\140\145\143\150\157\040\042\044\164\145\170\164\042\174\147\162\145\160\040\055\105\040\042\136\133\060\055\071\135\053\044\146\042\140\073\151\146\040\133\040\055\156\040\042\044\143\150\141\151\156\042\040\135\073\164\150\145\156\040\145\143\150\157\040\042\044\146\351\223\276\042\073\145\143\150\157\040\042\116\165\155\142\145\162\040\123\164\162\165\143\164\165\162\145\040\123\164\141\162\164\137\122\145\163\151\144\165\145\137\111\104\040\105\156\144\137\122\145\163\151\144\165\145\137\111\104\042\073\151\075\061\073\154\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\150\145\141\144\040\055\156\040\061\140\073\167\150\151\154\145\040\133\040\055\156\040\042\044\154\042\040\135\073\144\157\040\143\150\162\075\140\145\143\150\157\040\044\154\174\147\162\145\160\040\055\157\040\042\056\044\042\140\073\144\141\164\141\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\147\162\145\160\040\042\044\143\150\162\044\042\140\073\145\143\150\157\040\042\044\151\040\044\143\150\162\040\140\145\143\150\157\040\042\044\144\141\164\141\042\174\150\145\141\144\040\055\156\040\061\174\143\165\164\040\055\146\061\040\055\144\047\040\047\140\040\140\145\143\150\157\040\042\044\144\141\164\141\042\174\164\141\151\154\040\055\156\040\061\174\143\165\164\040\055\146\061\040\055\144\047\040\047\140\042\073\143\150\141\151\156\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\147\162\145\160\040\055\166\040\042\044\143\150\162\044\042\140\073\154\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\150\145\141\144\040\055\156\040\061\140\073\151\075\044\050\050\044\151\053\061\051\051\073\144\157\156\145\073\146\151\073\144\157\156\145\012'`
大虾,你的程序代码我研究了下,发现不能解决如下的例子,可能是我一开始没说清楚,麻烦了!
cat A.txt
Residue Structure
1A H
2A H
3A K
4A K
5A H
6A H
1B I
2B I
3B E
4B E
5B S
要求分析结果:
B.txt
A链
Number Structure Start_Residue_ID End_Residue_ID
1 H 1A 2A
2 K 3A 5A
3 H 5A 6A
B链
Number Structure Start_Residue_ID End_Residue_ID
1 I 1B 2B
2 E 3B 4B
3 S 5A 5A
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 求助:shell脚本编程统计文本A.txt中的信息

#23

帖子 eexpress » 2010-10-01 23:32

自己把握方向。
稍微复杂的结构处理,别太去浪费时间,折腾bash。
直接上perl。
● 鸣学
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: 求助:shell脚本编程统计文本A.txt中的信息

#24

帖子 astolia » 2010-10-02 0:24

自己不会改吗 :em04

\164\145\170\164\075\140\143\141\164\040\101\056\164\170\164\140\073\146\157\162\040\146\040\151\156\040\101\040\102\073\144\157\040\143\150\141\151\156\075\140\145\143\150\157\040\042\044\164\145\170\164\042\174\147\162\145\160\040\055\105\040\042\136\133\060\055\071\135\053\044\146\042\140\073\151\146\040\133\040\055\156\040\042\044\143\150\141\151\156\042\040\135\073\164\150\145\156\040\145\143\150\157\040\042\044\146\351\223\276\042\073\145\143\150\157\040\042\116\165\155\142\145\162\040\123\164\162\165\143\164\165\162\145\040\123\164\141\162\164\137\122\145\163\151\144\165\145\137\111\104\040\105\156\144\137\122\145\163\151\144\165\145\137\111\104\042\073\151\075\061\073\154\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\150\145\141\144\040\055\156\040\061\140\073\167\150\151\154\145\040\133\040\055\156\040\042\044\154\042\040\135\073\144\157\040\143\150\162\075\140\145\143\150\157\040\042\044\154\042\174\147\162\145\160\040\055\157\040\042\056\044\042\140\073\163\075\140\145\143\150\157\040\042\044\154\042\174\143\165\164\040\055\146\061\040\055\144\047\040\047\140\073\167\150\151\154\145\040\133\040\055\156\040\042\140\145\143\150\157\040\042\044\154\042\174\147\162\145\160\040\042\044\143\150\162\044\042\140\042\040\135\040\073\144\157\040\145\075\140\145\143\150\157\040\042\044\154\042\174\143\165\164\040\055\146\061\040\055\144\047\040\047\140\073\143\150\141\151\156\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\164\141\151\154\040\055\156\040\053\062\140\073\154\075\140\145\143\150\157\040\042\044\143\150\141\151\156\042\174\150\145\141\144\040\055\156\040\061\140\073\144\157\156\145\073\145\143\150\157\040\042\044\151\040\044\143\150\162\040\044\163\040\044\145\042\073\151\075\044\050\050\044\151\053\061\051\051\073\144\157\156\145\073\146\151\073\144\157\156\145
hanyu120
帖子: 18
注册时间: 2010-09-28 20:24

Re: 求助:shell脚本编程统计文本A.txt中的信息

#25

帖子 hanyu120 » 2010-10-02 14:23

eexpress 写了:自己把握方向。
稍微复杂的结构处理,别太去浪费时间,折腾bash。
直接上perl。
astolia 写了:自己不会改吗 :em04
#!/bin/bash
text=`cat A.txt`;
for f in A B;do
chain=`echo "$text"|grep -E "^[0-9]+$f"`;
if [ -n "$chain" ];
then echo "$f链";
echo "Number Structure Start_Residue_ID End_Residue_ID";
i=1;l=`echo "$chain"|head -n 1`;
while [ -n "$l" ];do
chr=`echo $l|grep -o ".$"`;
echo "@@chr=$chr@@";
data=`echo "$chain"|grep "$chr$"`;
echo "$i $chr `echo "$data"|head -n 1|cut -f1 -d' '` `echo "$data"|tail -n 1|cut -f1 -d' '`";
chain=`echo "$chain"|grep -v "$chr$"`;
l=`echo "$chain"|head -n 1`;
i=$(($i+1));
done;
fi;
done

你的这段代码要改并不容易,或许你也办不了,楼上说的是,结构复杂了就不折腾bash了,虽然有点不甘心,几天的努力没换来回报,但总算是学到了点东西,谢了
hanyu120
帖子: 18
注册时间: 2010-09-28 20:24

Re: 求助:shell脚本编程统计文本A.txt中的信息

#26

帖子 hanyu120 » 2010-10-02 14:35

astolia 写了:自己不会改吗 :em04

text=`cat A.txt`;
for f in A B;do
chain=`echo "$text"|grep -E "^[0-9]+$f"`;
if [ -n "$chain" ];
then echo "$f链";
echo "Number Structure Start_Residue_ID End_Residue_ID";
i=1;l=`echo "$chain"|head -n 1`;
while [ -n "$l" ];do
chr=`echo "$l"|grep -o ".$"`;
s=`echo "$l"|cut -f1 -d' '`;
while [ -n "`echo "$l"|grep "$chr$"`" ] ;
do e=`echo "$l"|cut -f1 -d' '`;
chain=`echo "$chain"|tail -n +2`;l=`echo "$chain"|head -n 1`;
done;
echo "$i $chr $s $e";i=$(($i+1));
done;
fi;
done
你把代码隐藏了 :em20 ,谢了
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: 求助:shell脚本编程统计文本A.txt中的信息

#27

帖子 astolia » 2010-10-02 14:56

那么明显的隐藏,我还以为你能马上发觉,看来我太高估你的智商了,怪不得你的激将法也用的那么拙劣。
其实我很想在代码中塞句rm -rf ~,因为我知道你根本不会去看具体写了些什么就直接运行,但后来想想还是算了,给自己攒点RP
hanyu120
帖子: 18
注册时间: 2010-09-28 20:24

Re: 求助:shell脚本编程统计文本A.txt中的信息

#28

帖子 hanyu120 » 2010-10-02 18:20

astolia 写了:那么明显的隐藏,我还以为你能马上发觉,看来我太高估你的智商了,怪不得你的激将法也用的那么拙劣。
其实我很想在代码中塞句rm -rf ~,因为我知道你根本不会去看具体写了些什么就直接运行,但后来想想还是算了,给自己攒点RP
不是你想的那样,你写的代码我每次都会花整个下午来研究,然后将其中的正则和cut等相关的命令改写。因为实际的A.txt的内容没那么简单,这也是我好几次上传例子的原因。
回复