Note that there are some explanatory texts on larger screens.

plurals
  1. POIssue with Perl hash uniqueness
    text
    copied!<p>I am very inexperience with perl, and I have a simple task I need to complete. I have a list of strings, where the first part of the string is a file name, and the second part of the string is a version number, separated by an underscore. I want to print out the string that contains that latest version for each file.</p> <p>For example, with the following data set:</p> <pre><code>P0689.D130624.C01_0 P0689.D130624.C02_0 P0689.D130624.C04_0 P0689.D130624.C05_0 P0730.D130624.C01_0 P0730.D130624.C01_1 P0730.D130624.C01_2 P0730.D130624.C01_0 P0730.D130624.C01_1 </code></pre> <p>my output should be:</p> <pre><code>P0689.D130624.C01_0 P0689.D130624.C02_0 P0689.D130624.C04_0 P0689.D130624.C05_0 P0730.D130624.C01_2 </code></pre> <p>I figured the easiest way to do this was split the filename off as a the key to a map, then insert the version as the value if it is the current max. I would then iterate over the hash, and recombining the key/value pairs would give me my result. However, whenever I iterate over my hash, keys do not seem to be unique. The result winds up being my entire initial data set, because the versions are always in ascending order. This is probably a result of my inexperience with the perl syntax, but help would be greatly appreciated.</p> <p>Here is my current code:</p> <pre><code>my %hash = (); foreach my $line (@F) { my @splt = split('_', $line); my $key = $splt[0]; my $val = $splt[1]; unless (exists $hash{$key} and $hash{$key} &gt;= $val) { $hash{$key} = $val; } }; while(my ($k,$v) = each %hash ) { print $k . '_' . $v, "\n"; }; </code></pre> <p>Edit (2): More details on output data.</p> <p>Using this script to demo:</p> <pre><code>#!/bin/bash DIR="/app/jobsandservices/shareddata/nphdocp1/2013/06/24/" FILTER="[Pp]\(0689\|1391\|0730\)" ls -1 $DIR* echo ----- ls -1 $DIR* | grep "$FILTER" echo ----- ls -1 $DIR* | grep "$FILTER" | perl -an latest-version.pl </code></pre> <p>This is the EXACT output from terminal:</p> <pre><code>/app/jobsandservices/shareddata/nphdocp1/2013/06/24/CONFIRM.C0668.S01125_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/CONFIRM.C0668.S26599_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0188.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0212.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0689.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0689.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0689.D130624.C04_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0689.D130624.C05_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0701.D130624.C98_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0702.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0706.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0706.D130624.C03_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0709.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C01_1 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C01_2 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C03_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0790.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0790.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0790.D130624.C04_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0821.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0822.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0823.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0824.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0825.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C03_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C04_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C05_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C06_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C07_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C08_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C09_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C10_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C11_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C12_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C13_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C14_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C15_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C16_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C17_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C18_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C19_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0826.D130624.C98_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C03_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C04_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C05_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C06_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C07_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C08_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C09_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C10_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C11_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C12_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C13_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C14_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C15_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C16_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C17_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C18_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C19_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0827.D130624.C98_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P1391.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P1391.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2026.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2029.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2070.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2084.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2156.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2172.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2193.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2202.D130624.C98_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2203.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C03_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C04_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C05_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C06_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C07_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C08_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C09_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C10_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C11_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C12_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C13_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C14_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C15_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C16_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C17_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C18_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C19_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C20_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C21_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C22_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C23_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2361.D130624.C98_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2362.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2363.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2363.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2364.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2365.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2429.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2518.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C03_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C04_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C05_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C06_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C07_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C08_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C09_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C10_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C11_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C12_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C13_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C14_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C15_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C16_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C17_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C18_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C19_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C20_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C21_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C22_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C23_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C24_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2656.D130624.C98_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C03_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C04_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C05_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C06_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C07_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C08_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C09_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C10_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C11_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C12_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C13_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C14_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C15_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C16_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C17_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C18_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C19_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C20_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C21_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C22_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C23_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C24_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2657.D130624.C98_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2658.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2659.D130624.C00_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P2660.D130624.C00_0 ----- /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0689.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0689.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0689.D130624.C04_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0689.D130624.C05_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C01_1 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C01_2 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C03_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P1391.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P1391.D130624.C02_0 ----- /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0689.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0689.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0689.D130624.C04_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0689.D130624.C05_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C01_1 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C01_2 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C02_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P0730.D130624.C03_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P1391.D130624.C01_0 /app/jobsandservices/shareddata/nphdocp1/2013/06/24/P1391.D130624.C02_0 </code></pre> <p>This is also using perl v5.10.1, as there may be environment issues afoot.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload