行を列に分割し、前の行の値と比較するだけです。前の値が現在の行の値より大きい場合、列はソートされません。
#! /usr/bin/perl
use strict;
use warnings;
my @sorted = (1, 1, 1, 1);
my $first = <>; # read the first line
my @prev = split(/\t/, $first);
while (<>) {
my @cols = split(/\t/);
for (my $i = 0; $i < 4; ++$i) {
$sorted[$i] = 0 if ($prev[$i] gt $cols[$i]);
}
@prev = @cols;
}
for (my $i = 0; $i < 4; ++$i) {
my $not = $sorted[$i] ? '' : 'not ';
print "Column $i is $not sorted\n";
}
テストファイル.txt
a a a a
b b b b
c c c c
d d d d
e e e a
f d f f
g g g g
として呼び出す
perl script.pl file.txt
あなたにあげます
列 0 はソートされています
列 1 はソートされていません
列 2 はソートされています
列 3 はソートされていません
これは、テキストを比較し、昇順でテストします。別の順序または別の比較が必要な場合は、それに応じて内側の for ループを調整する必要があります。