Shell
如何從shell中一行的列中的最後一個值中減去第一個值?
我有一個數據文件看起來像:
1 1 1 1 1 1 1 1 2 2 2 2 3 3 3 3 3 3 2 4 5 8 9 10 13 17 19 29 30 32 33 50 700 800 900 950
首先,我想通過查看第一行,在每 3 個相同的值之間插入空格,將每三個相同的數字保持在一個列中:
1 1 1 1 1 1 1 1 2 2 2 2 3 3 3 3 3 3 2 4 5 8 9 10 13 17 19 29 30 32 33 50 700 800 900 950
然後我想從第二行的每個新列中的最後一個值中減去第一個值(但是如果特定列中只有一個值(這裡是第二行的第四列),那麼上一列的最後一個值應該從該值中減去(32-30)),同時在第一行的每一列中保留一個唯一數字。所以最終的數據應該是這樣的:
1 1 1 2 2 3 3 3 2 4 11 2 667 150
請問有什麼建議嗎?同時我應該提到我的真實數據確實很大,我想在第一行對每 5 個唯一值進行分組。我可能想更改 group 的大小。所以我需要腳本靈活..
Perl 來救援!
#!/usr/bin/perl use warnings; use strict; my $group_size = 3; my @first = split ' ', <>; my @groups; my $start_index = 0; while ($start_index < @first) { my $step = 1; while ( $step < $group_size && $start_index + $step < @first && $first[$start_index] == $first[ $start_index + $step ] ) { ++$step; } push @groups, $step; print $first[$start_index], ' '; $start_index += $step; } print "\n"; my @numbers = split ' ', <>; my $last; for my $size (@groups) { my @group = splice @numbers, 0, $size; my $value = $group[-1] - $group[0]; $value = $group[0] - $last if 1 == $size; $last = $group[-1]; print $value, ' '; } print "\n";
如果第一個組只有一個成員,您還沒有指定應該發生什麼。