Chinaunix首页 | 论坛 | 博客
  • 博客访问: 236814
  • 博文数量: 54
  • 博客积分: 35
  • 博客等级: 民兵
  • 技术积分: 729
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-09 10:35
文章分类

全部博文(54)

文章存档

2014年(37)

2013年(17)

分类: LINUX

2014-04-12 18:23:52

处理前:
ABC = A1_B1;
ABD = C1_D1;
A1 = D0_A0;
B1 = A1_ABD;
C1 = C0;
D1 = B0_C1;

处理后:
ABC = D0_A0_D0_A0_C0_B0_C0;
ABD = C0_B0_C0;
A1 = D0_A0;
B1 = D0_A0_C0_B0_C0;
C1 = C0;
D1 = B0_C0;

处理要求:
将“值”中所有能替换的“键”都替换为对应的“值”。

点击(此处)折叠或打开

  1. awk 'NR==FNR{sub(/;/,"");a[$1]=$3;next}{do{l=0;for(i in a)if(!gsub(i,a[i],$3))l++}while(l file file

点击(此处)折叠或打开

  1. #!/usr/bin/perl
  2. use 5.010;
  3. my @data = <DATA>;
  4. my %hash;
  5. /(\S+)\s*=\s*([^;]+)/ and $hash{$1} = $2 for @data;
  6. for my $i (0..$#data) {
  7.         my @line = split /\s+/, $data[$i];
  8.         my $count = 0;
  9.         while ( $count < scalar keys %hash ) {
  10.                 $count = 0;
  11.                 $line[2] =~ s/$_/$hash{$_}/g or $count++ for keys %hash;
  12.         }
  13.         say join ' ', @line;
  14. }
  15. __DATA__
  16. ABC = A1_B1;
  17. ABD = C1_D1;
  18. A1 = D0_A0;
  19. B1 = A1_ABD;
  20. C1 = C0;
  21. D1 = B0_C1;


阅读(1449) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~