與數據的單個線Unix的sort
命令交易。一種選擇,如在評論概述,是將數據轉換爲每貨幣單行線,使用sort
,然後解開復合線:
sed -e 'N;N;N;s/\n/ /g' data | sort | perl -p -e 's/ (=+) /\n$1\n/; s/ $/\n/;'
sed
被證明頑抗關於把換行符到字符串,這樣我用perl
代替。當然,如果您完全使用perl
,則可以在perl
中完成整個工作。這是詳細的版本中,sed
和sort
部分的相當直接的音譯,但沒有必要刪除換行符,其排序後簡化了打印:
#!/usr/bin/env perl
use strict;
use warnings;
my @currencies;
while (<>)
{
my $l2 = <>;
my $l3 = <>;
my $l4 = <>;
push @currencies, "$_$l2$l3$l4";
}
print foreach (sort @currencies);
給定的輸入文件:
C01
====
892341231,786754321,1234567
C05
====
78675433432,1245673234
C02
====
444341231,333754321,2224567
兩個腳本產生的輸出:
C01
====
892341231,786754321,1234567
C02
====
444341231,333754321,2224567
C05
====
78675433432,1245673234
這是Perl的,所以有一個以上的方式做這(TMTOWTDI )和其他方式使用較少的蠻力,並且比一次讀取4行更脆弱。例如,您可以將行分隔符設置爲""
以強制段落模式,因此輸入的每個「行」都是由一個或多個空行分隔的段落。
#!/usr/bin/env perl
use strict;
use warnings;
local $/ = "";
my @currencies = <>;
print foreach (sort @currencies);
當然,即使這有點冗長。我們廢除了明確的陣列,因此我們不需要use strict;
,我們可以只是負擔得起將其降低到:
local $/ = "";
print foreach (sort <>);
或者你可以添加shebang行:
#!/usr/bin/perl -w
local $/ = "";
print foreach (sort <>);
請顯示所需的輸出。什麼是'序列號' - 數字鈔票的例子?序列號列表有多大?他們是否分裂成多行?最有可能的是,您需要格式化輸入數據,以便每個貨幣及其所有序列號位於一行中,對該列表進行排序,然後再將單行數據重新轉換爲多行。 –
@JonathanLeffler:謝謝喬納森回覆, 我需要根據上面的標題按排序格式輸出它已經按升序排序 是以下數據標題中的數據是在一行中 – Learner
並且數據包括行等號和貨幣之間的空白線? –