- 论坛徽章:
- 307
|
本帖最后由 sunzhiguolu 于 2015-12-04 19:32 编辑
回复 20# patagonia2
试下: (测试环境: Windows 7)
- tr -s [:blank:] < a.txt | sort -t" " -k2n -o a.txt
复制代码 代码如下:
- #!/usr/bin/perl
- use strict;
- use warnings;
- use Tie::File;
- my ($sFileA, $sFileB, @aData) = ('File A Path', 'File B Path');
- tie (my @aFileA, 'Tie::File', $sFileA, mode => 'O_RDONLY');
- open (my $fhFileB, '<', $sFileB);
- while (<$fhFileB>){
- my ($sB1, $sB2) = split;
- foreach my $sLine (@aFileA){
- my ($sA1, $sA2) = split /\s+/, $sLine;
- unless (@aData){
- @aData = ($sB1, $sA1, $sA2);
- }else{
- if (abs ($sA2 - $sB2) <= abs ($aData[-1] - $sB2)){
- if ($aData[-1] == $sA2){
- @aData = ($aData[0], $aData[1] . ' ' . $sA1, $aData[-1]);
- next;
- }
- $aData[1] = $sA1;
- $aData[-1] = $sA2;
- next;
- }
- last;
- }
- }
- printf "%s %s\n", @aData[0,1];
- @aData = ();
- }
- close ($fhFileB);
复制代码 输出结果如下:
- Q12 Babushkin
- D23 Azov
- Y11 Aznakayevo
- U10 Balashikha Balashov
- Q45 Babayevo
- A11 Bagrationovsk
- R08 Babayevo
- ZAA Babayevo
复制代码 |
|