Perl 根据相同字段并合并两个文本
0有两个文本:
a.txt的内容:
0001|abc|1000.00
0002|ddd|1200.20
0003|dde|100.01
0005|ggg|200
……..
……..
b.txt的内容:
1234|2600|1|AAAAA|abc|88888888|
1234|2600|2|BBBBB|ddd|8888888|
1234|2600|3|CCCCC|dde|8888|
1234|2600|4|DDDDD|eee|88888888888|
1234|2600|5|AAAAA|ggg|888888|
……….
……….
我想把a.txt的第一个字段删去前面的0后与b.txt的第3个字段比较,如果相等,就把b.txt中的第4个字段放在a.txt的前面.
生成结果如下:
AAAAA|0001|abc|1000.00
BBBBB|0002|ddd|1200.20
CCCCC|0003|dde|100.01
AAAAA|0005|ggg|200
………..
#!/usr/bin/perl
$filea="a.txt";
$fileb="b.txt";
open(FB,"<$fileb") || die "Can't read $fileb\n$!\n";
while(
@line=split(/\|/);
$datab{$line[2]}=$line[3];
}
close FB;
open (FA,"<$filea") || die "Can't read $filea\n$!\n";
while(
{
@line = split(/\|/);
$dataa{$line[0]} = $_;
}
foreach $key (sort {$b cmp $a} keys %dataa)
{
print $datab{int $key}.'|'.$dataa{$key} if exists $datab{int $key};
}
awk 列相同 合并行
0如果第一列与第二列相同,就合并行
cat a.txt
a b c
a b d
a b e
awk '{v=$1" "$2;a[v]=a[v](a[v]?" ":"")$3}END{for (j in a) print j,a[j]}' file
关于Perl的几点:多行注释,REF函数,类的初始化
0多行注释:
perl没有多行注释,可以用下面代替:
=pod
代码行;
.
.
.
代码行;
=cut
关于ref函数:
ref EXPR
ref Returns a non-empty string if EXPR is a reference, the empty
string otherwise. If EXPR is not specified, $_ will be used. The
value returned depends on the type of thing the reference is a
reference to. Builtin types include:
SCALAR
ARRAY
HASH
CODE
REF
GLOB
LVALUE
If the referenced object has been blessed into a package, then
that package name is returned instead. You can think of “ref” as
a “typeof” operator.
讲类的段落,比较明了:
Object Construction
All objects are references, but not all references are objects. A reference won’t work as an object unless its referent is specially marked to tell Perl what package it belongs to. The act of marking a referent with a package name–and therefore, its class, since a class is just a package–is known as blessing. You can think of the blessing as turning a reference into an object, although it’s more accurate to say that it turns the reference into an object reference.
(更多…)
为什么thinkpad T61会发现吱吧电流声[zt]
0一台THINKPAD T61笔记本电脑单击用电池使用电脑时,在主板和电池接口的附近会发出吱吱电流声请问这是怎么回事呀?
THINKPAD T61笔记本电脑的CPU在默认状态下是可以变频的,所以当笔记本电脑使用电池时,为了发挥省电效能,CPU会降频运行,而在CPU与WINDOWS操作系统产生大量数据交换的时候,CPU会自动升高主频来完成加速任务,在完成后CPU会自动升高主频来加速完成任务,在完成后CPU会自动降回省电的频率运行,而这一高一低的来回切换频,造成笔记本电脑发出吧吧电流声,是正常的现象,所以要解决该问题,只要在主板BIOS设置中将CPU频率调节到始终使用最高,问题就可以解决,具体方法如下:启动计算机,进入主板BIOS设置,选择CONFIG-POWER-CPU POWER MANAGEMENT –AUTOMATIC将其值改为DISABLE,保存退出主板BIOS设置,问题就可以解决了。
PS:还没尝试过,还有人建议禁用USB接口的节电功能。目前有效果的是,移除底部的散热加,放平笔记本电流声就减少明显。
awk中使用单引号
0看了一个帖子,是说明,如何在awk中使用单引号的,并举了一个例子,原文如下:
awk 中插入单引号需要转义,但是并不是想象中的那么简单。有点周折,发出来和大家共享。
awk ‘{print “INSERT INTO TABLE_NAME (COL1,COL2) VALUES (““’\’’“ $1 “’\’’“ “,“ “’\’’“ $2 “’\’’“ “)“ }’ DATA_FILE >abc.sql
其实,这是比较糟糕的方式,awk的单引号可以用\47 表示,原文中的例子可为:
awk ‘{print “INSERT INTO TABLE_NAME (COL1,COL2) VALUES (\47“$1“\47,\47“$2“\47);“ }‘ DATA_FILE >abc.sql
顺便说一句,原文中所使用的sql语句在“)”后面没有加“;”号,这会有问题的。
MySQL分区(Partition)功能试验
0[概述]
[分区表和未分区表试验过程]
[分区命令详解]
[概述]
自5.1开始对分区(Partition)有支持,6.0应比较稳定
= 水平分区(根据列属性按行分)=
举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。
=== 水平分区的几种模式:===
* Range(范围) – 这种模式允许DBA将数据划分不同范围。例如DBA可以将一个表通过年份划分成三个分区,80年代(1980′s)的数据,90年代(1990′s)的数据以及任何在2000年(包括2000年)后的数据。
* Hash(哈希) – 这中模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区,。例如DBA可以建立一个对表主键进行分区的表。
* Key(键值) – 上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。
* List(预定义列表) – 这种模式允许系统通过DBA定义的列表的值所对应的行数据进行分割。例如:DBA建立了一个横跨三个分区的表,分别根据2004年2005年和2006年值所对应的数据。
* Composite(复合模式) – 很神秘吧,哈哈,其实是以上模式的组合使用而已,就不解释了。举例:在初始化已经进行了Range范围分区的表上,我们可以对其中一个分区再进行hash哈希分区。
= 垂直分区(按列分)=
举个简单例子:一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度。
(更多…)
EXCEL导入网页表格时把<br />换成单元格内部的换行
0每次遇到网页表格单元格内部的换行,EXCEL自动把它变成另外一行,这使人非常郁闷,解决方法如下:
先按文本的方式放入一个单元格里,即
显示出来:123
456这样的字符串录入进去。
之后用ALT+10替换掉
即可完成换行。
当然,你可以使用更加个性化的标识来替代
做前期的录入。
解决mysql–Can’t get stat of ” (Errcode: 13)
0mysql错误提示:
mysql> ERROR 13 (HY000): Can’t get stat of ‘/root/aaa’ (Errcode: 13)
目录权限问题,将/root/aaa的父子两层目录均设为777就可以了。
mysql存储过程错误代码1307,”Failed to create procedure …”
0将mysql数据库中的表proc删除,或者改名
执行以下代码重建该表
————————————————————————
CREATE TABLE `proc` (
`db` char(64) character set utf8 collate utf8_bin NOT NULL default '',
`name` char(64) NOT NULL default '',
`type` enum('FUNCTION','PROCEDURE') NOT NULL,
`specific_name` char(64) NOT NULL default '',
`language` enum('SQL') NOT NULL default 'SQL',
`sql_data_access` enum('CONTAINS_SQL','NO_SQL','READS_SQL_DATA','MODIFIES_SQL_DATA') NOT NULL default 'CONTAINS_SQL',
`is_deterministic` enum('YES','NO') NOT NULL default 'NO',
`security_type` enum('INVOKER','DEFINER') NOT NULL default 'DEFINER',
`param_list` blob NOT NULL,
`returns` char(64) NOT NULL default '',
`body` longblob NOT NULL,
`definer` char(77) character set utf8 collate utf8_bin NOT NULL default '',
`created` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`modified` timestamp NOT NULL default '0000-00-00 00:00:00',
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY',\
'NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS',\
'NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','GBASE80','GBASE81','ANSI','NO_AUTO_VALUE_ON_ZERO',\
'NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE',\
'INVALID_DATES',\
'ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE') NOT NULL default '',
`comment` char(64) character set utf8 collate utf8_bin NOT NULL default '',
`character_set_client` char(32) character set utf8 collate utf8_bin default NULL,
`collation_connection` char(32) character set utf8 collate utf8_bin default NULL,
`db_collation` char(32) character set utf8 collate utf8_bin default NULL,
`body_utf8` longblob,
PRIMARY KEY (`db`,`name`,`type`)
) DEFAULT CHARSET=utf8 COMMENT='Stored Procedures'
===================================================================
早期的该表结构如下:
(更多…)
CentOS 5.3上安装Apache+php+Mysql+phpMyAdmin
01、系统下载
CentOS 开发社区已发布了新的 5.3 版本。CentOS 5.3 基于 Red Hat Enterpris Linux 5.3.0,其中包括 Kernel 2.6.18、Apache 2.2、PHP 5.1.6、MySQL 5.0、PostgreSQL 8、GNOME 2.16、KDE 3.5、OpenOffice.org 2.3、Firefox 3.0、Evolution 2.12 等等。此外,CentOS 5.3 更新了美工设计,并根据用户的请求恢复了 Contrib 仓库。
CentOS 5.3 支持 i386 及 x86_64 架构,其 ISO 映像可从以下地址获取。
isoredirect.centos.org/centos/5
/isos/
2、系统安装
安装CentOS 5.3是做服务器,所以没有用的,一概不装;具体哪些不装,自己看着办吧:)
3、安装Apache+php+Mysql
a、 用yum安装前.先是替换为中国CentOS镜像服务器!中国官方镜像网站:
http://centos.ustc.edu.cn/
安装后请按照以下步骤修改CenOS-Base.repo,以后就可以方便的用yum安装软件了().
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.save
wget
http://centos.ustc.edu.cn/CentOS-Base.repo.5
mv CentOS-Base.repo.5 CentOS-Base.repo
b、更新系统内核到最新. yum -y update (更多…)