以下のようなデータで、同じClassのうちPositionの差が100以下の行は削除したいのですが、やり方がわかりません。
このようなデータがたくさんあり手作業では困難なため、Perlによる処理をしたいです。
スクリプトを教えてもらえないでしょうか。
入力データは以下の通りです。
Class Position
1 12
1 34
1 430
1 800
1 1000
1 1034
2 1
2 10
2 98
2 500
2 780
次の行とのPositionの差が<100だったら削除するみたいな感じで処理して
以下のような出力結果にしたいです。
Class Position
1 12
1 430
1 800
1 1000
2 1
2 500
2 780
ご教示いただけないでしょうか。
よろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
やり方(データ構造の作り方や使うループとかの種類)は様々ありますが。
基本構造はこのように書けると思われます。
my $array = [
[12, 34, 430, 800, 1000, 1034,],
[1, 10, 98, 500, 780,],
];
foreach my $class ( @$array ){
my $old = $class->[0] - 100;
foreach my $Position (@$class){
print $Position . "\n" if($Position >= $old + 100);
$old = $Position;
}
}
No.2
- 回答日時:
1行目は見出し(Class Positionの文字)ですか。
それとも、いきなりデータ(1 12の文字)ですか。
データの区切りは、半角のスペースであってますか。
No.3
- 回答日時:
標準入力からデータを読み込んで処理
my $clz = "";
my $pos = 0;
foreach (<>) {
my @a = split /\s+/;
print if $clz ne $a[0] || $pos + 100 < $a[1];
($clz,$pos) = @a;
}
ワンライナーで実行
cat ファイル | perl -ne 'BEGIN{$clz="";$pos=0;} @a = split /\s+/; print if $clz ne $a[0] || $pos + 100 < $a[1]; ($clz,$pos) = @a;'
標準入力以外から読み込むなら以下を参考
http://perldoc.jp/docs/perl/5.24.1/perlopentut.pod
No.4
- 回答日時:
data.txtというテキストファイルが入力データである前提で…
open(R,"data.txt");
my $cl = 0;
my $pos = -100;
while(<R>) {
if(/(¥d+)¥D+(¥d+)/) {
if($1 != $cl) { $cl = $1; $pos = -100;}
if($2 - 100 > $pos) {
print " $1 $2¥n";
}
$pos = $2;
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS HTML、cssのatomつぅーやつで 課題Ex1ってやつを表示させたいのですが、 私は課題Ex1が 2 2022/12/15 16:56
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- HTML・CSS 吹き出し 下記の吹き出しのスタイルシートについて 下記のスタイルシートは左側にアイコンがでる使用にな 1 2022/11/12 17:55
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- JavaScript 画面に表示したらアニメーションを開始したい 3 2023/01/13 15:38
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて 重複したものがあれば行を削除するとい 1 2023/02/27 18:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルで提出とは?
-
ターミナルで特定の文字と文字...
-
Perlでの文字列置換
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlのrequireの動き方について...
-
ペプシコーラとコカ・コーラとD...
-
perlについての質問
-
perl このテキストファイルを簡...
-
Perlでファイルの末尾から指定...
-
Perlで特定文字列から特定文字...
-
Perlのプログラムについて
-
CGIでimgタグでalignを使うとエ...
-
openした後、closeしないでプロ...
-
perl 初等プログラミングについて
-
Windows版のPerlについて
-
このファイルを開く方法で困っ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
perlをバージョンアップしたら...
-
openした後、closeしないでプロ...
-
Perlで特定文字列から特定文字...
-
Wallpaper Engineでおすすめの...
-
Perlのエラーについてご教授く...
-
アルファベットに付いて質問し...
-
Strawberry Perl for Windows ...
-
bashスクリプト
-
テキストファイルで提出とは?
-
Perl の外部モジュールの利用方法
-
#!/usr/bin/perlで書きだしたCG...
-
Windows10においての『Perl』の...
-
perlのflock関数でロックをかけ...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
画像が表示でnull; this.src
-
ターミナルで特定の文字と文字...
-
英数文字列のうちの数値を4桁に...
おすすめ情報