Chinaunix

标题: 如何将文件中所有行由abc123变为123abc? [打印本页]

作者: mels    时间: 2010-12-23 13:18
标题: 如何将文件中所有行由abc123变为123abc?
输入法码表文件,内容如:
啊a
阿a
...
吧ba
把ba
...
白痴baichi
白吃baichi
...

怎么样改成:

a 啊 阿
...
ba 吧 把
...
baichi 白痴 白吃
...
这样的格式呢?

用sed方便还是awk方便?
作者: yinyuemi    时间: 2010-12-23 14:11
本帖最后由 yinyuemi 于 2010-12-23 14:48 编辑
  1. sed 's/[a-z].*/ &/g' file | awk '{for (i=NF;i>=1;i--) printf("%s\t",$i);print""}' | sort |awk '{a[$1]=a[$1]?a[$1]" "$2:$0}END{for(i in a)print a[i]}'
复制代码

作者: mels    时间: 2010-12-23 14:44
本帖最后由 mels 于 2010-12-23 14:47 编辑
sed 's/[a-z]*/ &/g' file | awk '{for (i=NF;i>=1;i--) printf("%s\t",$i);print""}' | sort |awk '{a[$1] ...
yinyuemi 发表于 2010-12-23 14:11



    gawk for windows XP似乎不行。

awk: '{for
awk: ^ invalid char ''' in expression
awk: '{a[$1]=a[$1]?a[$1] $20}END{for(i
awk: ^ invalid char ''' in expression
作者: yinyuemi    时间: 2010-12-23 14:50
gawk for windows XP似乎不行。

awk: '{for
awk: ^ invalid char ''' in expression
awk: ' ...
mels 发表于 2010-12-23 14:44



    我又改了下,你试试行不,见二楼的代码
作者: 昭襄王    时间: 2010-12-23 15:06
  1. #! /usr/bin/perl
  2. open(LINES , "lines008");
  3. chomp(@lines = <LINES>);
  4. for (@lines){
  5.     @line = split /\b/;
  6.     $hash{$line[1]} .= " $line[0]";
  7. }

  8. for $key (sort keys %hash){
  9.     print "$key$hash{$key}\n";
  10. }
复制代码

作者: mels    时间: 2010-12-23 15:07
我又改了下,你试试行不,见二楼的代码


难不成是我的系统缺少东西?

sed: -e expression #1, char 1: unknown command: `''
'/g'' 不是内部或外部命令,也不是可运行的程序或批处理文件。
   
发个附件给你,麻烦你转一下,谢谢。
test.zip (1.31 KB, 下载次数: 57)
作者: mels    时间: 2010-12-23 15:10
在单位,只有XP系统,没有linux/BSD,临时安装的gnu sed/gawk for win32。
看软件帮助里好像gnu sed 不支持命令行里有 '。
作者: 昭襄王    时间: 2010-12-23 15:12
./pl035
a 日 曰
aa 昌 昍
aaa 晶 晿
aaaa &#144043; &#144045; 暗暗
aaab 昌明
aaac 日显
aaaf 日照
aaah 曑 日影 暗影
aaak &#144022;
aaam 曡 曐 㬪
aaaq 日晕
aaau 日冕 明晃晃
aaav 曟
aaaw 日晒
aabb 日月
aabl 歇歇脚
aabq 日军 日用
aabt 㬈
aabu 日见
aabuu 覸
aad &#143873;
aadm 日本
aadp 暗想
aadr 晶格 暗格
aadt 日来
aae &#133970;
aaeb 昆明湖 暗潮
aaef 暗淡
aaeg 暗滩
aael 日渐
aaeu 暗流
aaf 焸
aafb 日常
aaff &#148434;
aafk 日数
aafn 照明灯
aaft 晶粒
aafu 日光 曙光
aaga 日增
aagd 暗地
aagm 日均 日趋
aagp 日志
aagr 昌吉 暗喜
aaha 暗香
aahaf 鷼 &#172167;
aahb 日币
aahg 日程
aahha 明明白白
aahi &#171302; 暗射
aahk 暗笑
aahm 暒
aahml 㫀
aahn 暗箭
aahr 日后
aaht 暗算
aahu &#143922; 暗箱 暗自
aahvo &#150278;
aahx &#158084;
aahy 暗处
aaiff 星星之火
aaik 暗讽
aail &#144184; 日神
aair 日语 暗话 暗语
aais 暗房 暗访
aait 昌盛
aaiu 日记
aaje 日寇
aajg 暗室
aajl 昌都
aajns &#143980;
aajr 暗害
aajs 日韩
aajv 暥
aakd 日杂 暗杀
aaku 暗疮
aala 日间
aall 日中 暗中
aally 是是非非
aaln 晶片
aals 暗门
aam 㫜
aamb 日丽
aamd 日臻
aamed 日晒雨淋
aamf 暗礁 暗示
aamg &#149897;
aamh 暘
aamj 晘 昌平
aamm 暗码
aamo &#143942;
aamr 晶石
aams 日历
aamu 㫯 日元
aamv &#144016;
aamy 日下 暗下
aana &#144058;
aand 日子
aanh &#144049;
aank &#144153;
aanm 昌隆
aano &#145624; 日久
aanu 日色 暗色 曙色
aaob 日内
aaoe 暑假
aaom 晶体
aaon 日创
aaoo 暗锁
aaoop 晃晃悠悠
aaop 日化
aaor 暗合 暗含
aaos 暗伤
aaov 日食
aap &#141021;
aaph 晹
aapp &#143872; 日心
aapv 暍
aaqa 暗指
aaqd 暗探
aaqe 日报
aaqno 旷日持久
aaqp 日托
aaqr 暗扣
aarb 暗哨
aarn 暗喻
aarr 暗器
aars 暗号
aasi 日戳
aasn 日剧
aata 日暮
aatb 日期 暑期
aatc 暗黄
aate 曝
aati 晶莹
aatk 日美
aatl 日薪
aatn 日前
aatp 暗花
aatr &#144136; 日落
aats 暗藏
aatt 日益
aaud &#144145;
aauu 日出
aava 暗娼
aave 暗绿
aavf 㬤
aavj 日线 暗线
aavm 日经 暗红
aavvj 影影绰绰
aawg 暗里
aawo 晶圆
aayb 昆明市
aayf 暻 暗紫
aayh 日产
aayk 日夜 日头 日文 暗夜
aayl 日新
aayn 晶亮
aayp 暗恋
aayr 日商
aays 日方
aayt 日立 日进
aayu 暗道
aayyf 星星点点
aayyk 日日夜夜
aayyn 时时刻刻
ab 明
作者: yinyuemi    时间: 2010-12-23 15:13
回复 6# mels


    是你想要的么?

results.rar

1.28 KB, 下载次数: 58


作者: 昭襄王    时间: 2010-12-23 15:14
好多文泉驿没有的字
作者: yinyuemi    时间: 2010-12-23 15:16
可以安装cygwin,我用的就是
作者: mels    时间: 2010-12-23 15:22
回复  mels


    是你想要的么?
yinyuemi 发表于 2010-12-23 15:13



    楼上 襄阳王 的结果是我要的。你的好像行序变了,行末多了空格。
作者: mels    时间: 2010-12-23 15:24
好多文泉驿没有的字
昭襄王 发表于 2010-12-23 15:14



    是的,很多罕见字。
作者: 昭襄王    时间: 2010-12-23 15:30
回复 12# mels


    是昭襄王
作者: magnet2008    时间: 2010-12-23 15:30
正则
echo "AabcD123E"|perl -pe "s#abc|123#$& eq "abc"?123:abc#eg"
A123DabcE
作者: yinyuemi    时间: 2010-12-23 15:32
楼上 襄阳王 的结果是我要的。你的好像行序变了,行末多了空格。
mels 发表于 2010-12-23 15:22



    恩,使用了数组后,输出是随机的

还是襄阳王牛! 哈哈
作者: 昭襄王    时间: 2010-12-23 15:36
回复 16# yinyuemi


    是昭襄王
用hash肯定是乱的,sort一下就好了
作者: yinyuemi    时间: 2010-12-23 15:41
sorry!昭襄王
我试着在代码里 加asort(a),再打印,不过仍然不是原来的顺序
作者: lwlnuaa    时间: 2010-12-23 15:45
刚学Sed,写了一个,请各位大哥不要笑话:
sed 's/[a-z]/ &/' test.txt| sed 's/\(.*\) \(.*\)/\2 \1/'|sed ':a;$!N;s/\n/>/;s/\(.*\) \(.*\)>\1 \(.*\)/\1 \2 \3/;ta;'|sed 's/>/\n/g'

这样做效率很低啊..........我不会放到一个sed里面去
作者: mels    时间: 2010-12-23 15:47
回复  mels


    是昭襄王
昭襄王 发表于 2010-12-23 15:30



    襄阳王比较顺口
作者: mels    时间: 2010-12-23 15:51
都是大牛啊,膜拜下!
作者: yinyuemi    时间: 2010-12-23 16:11
本帖最后由 yinyuemi 于 2010-12-23 16:18 编辑

这回不乱了,呵呵

$ sed 's/[a-z].*/ &/g' test.txt |awk 'NR==1{printf $2" "$1;v=$2} NR>1 {if($2==v) {printf " "$1} else {printf "\n"$2" "$1}}{v=$2}'
作者: mels    时间: 2010-12-23 21:34
本帖最后由 mels 于 2010-12-23 21:36 编辑
   1. #! /usr/bin/perl
   2. open(LINES , "lines008");
   3. chomp(@lines = <LINES>);
   4. for (@lines){
   5.     @line = split /\b/;
   6.     $hash{$line[1]} .= " $line[0]";
   7. }
   8.

   9. for $key (sort keys %hash){
  10.     print "$key$hash{$key}\n";
  11. }



    难道是我RP问題?slackware 13.1/perl 5.10.1执行这段代码没反应。
作者: mels    时间: 2010-12-23 21:41
这回不乱了,呵呵

$ sed 's/[a-z].*/ &/g' test.txt |awk 'NR==1{printf $2" "$1;v=$2} NR>1 {if($2==v) ...
yinyuemi 发表于 2010-12-23 16:11



    同样,slackware 13.1 / sed 4.2.1 /awk 3.1.8 执行这行代码也不成功:
awk: (FILENAME=- FNR=1132) fatal: not enough arguments to satisfy format string
...
^ ran out for this one
作者: 昭襄王    时间: 2010-12-24 08:15
回复 23# mels


    perl -v

This is perl, v5.10.1 (*) built for i686-linux-gnu-thread-multi
(with 40 registered patches, see perl -V for more detail)
作者: yinyuemi    时间: 2010-12-24 08:42
回复 24# mels


$ sed --version
GNU sed version 4.2.1
Copyright (C) 2009 Free Software Foundation, Inc.

$ awk --version
GNU Awk 3.1.7
Copyright (C) 1989, 1991-2009 Free Software Foundation.

如果lz平时使用windows比较多的话,建议安装cygwin,或是Mingw,常用的shell命令都有,应付一般的文本处理应该是绰绰有余。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2