私はPerlを学んでいますが、この問題を解決する方法がわかりません。
.txt
次の形式のファイルがあります。
1 16.3346384
2 11.43483
3 1.19819
4 1.1113829
5 1.0953443
6 1.9458343
7 1.345645
8 1.3847385794
9 1.3534344
10 2.1117454
11 1.17465
12 1.4587485
最初の列には行番号のみが含まれており、ここでは興味がありませんが、2番目の列の値は関連部分です。
2番目の列に2.00未満の数値を持つ最長の連続行シーケンスを出力したいと思います。上記の例では3行から9行になり、出力は次のようになります。
1.19819
1.1113829
1.0953443
1.9458343
1.345645
1.3847385794
1.3534344
ベストアンサー1
パール1行:
perl -ne '$n = (split)[1]; if ($n > 2) {if ($i > $max) {$longest=$cur; $cur=""; $max=$i}; $i=0} else {$cur .= $n . "\n"; $i++} END {print $i > $max ? $cur : $longest}' < file.txt
より良い読みやすさのための複数行:
perl -ne '
$n = (split)[1];
if ($n > 2) {
if ($i > $max) {
$longest=$cur;
$cur="";
$max=$i;
}
$i=0
} else {
$cur.= $n . "\n";
$i++
}
END {
print $i > $max ? $cur : $longest
}' < file.txt
ライナー1個awk
:
awk '$2 > 2 { if (i > max) {res=cur; cur=""; max=i} i=0} $2 < 2 {cur = cur $2 "\n"; i++} END {if (i > max) res=cur; printf res}' file.txt
複数行:
awk '
$2 > 2 {
if (i > max) {
res=cur
cur=""
max=i
}
i=0
}
$2 < 2 {
cur = cur $2 "\n"
i++
}
END {
if (i > max) res=cur
printf res
}' file.txt