タグ付けされた質問 「perl」

Perlは、高水準で汎用のインタプリタ型動的プログラミング言語です。それはもともと、レポート処理を容易にするための汎用Unixスクリプト言語としてLarry Wallによって開発され、オープンソースコミュニティのサポートを得て、グラフィックプログラミング、システム管理、ネットワークプログラミング、ファイナンスに使用できるように進化および成熟しました。 、バイオインフォマティクス、およびその他のエンジニアリングアプリケーション。

9
スクリプトを生き続けるために「while true」を使用するのは良い考えですか?
私はただ別の世界からunixに飛び込んでいて、 while true do /someperlscript.pl done perlスクリプト自体には、ターゲットの場所でファイルが変更されたときに実行されるフォルダー/ファイルウォッチャーが内部にあります。 これwhile trueは良いアイデアですか?そうでない場合、好ましい堅牢なアプローチは何ですか? TIA 編集:これはかなりの関心を生み出したように見えるので、ここに完全なシナリオがあります。perlスクリプト自体は、ファイルウォッチャーを使用してディレクトリを監視します。新しいファイルを受信すると(rsyncを介して到着します)、新しいファイルを取得して処理します。現在、着信ファイルが破損している可能性があり(質問しないでください。ラズベリーパイから来ています)、時にはプロセスがそれを処理できないことがあります。私たちはまだすべてのシナリオを認識していないので、正確な理由はわかりません。 ただし、プロセスが何らかの理由で失敗した場合、次のファイルはエラーを引き起こした可能性のある前のファイルとは完全に無関係であるため、実行して次のファイルを処理する必要があります。 通常、何らかのキャッチオールを使用し、コード全体をラップして、クラッシュしないようにしました。しかし、perlには確信がありませんでした。 私が理解したことから、supervisordのようなものを使用することはこのための良いアプローチです。
19 shell  perl 

2
プロセスがスリープ状態になる理由を知り、ウェイクアップする方法は?
'top'を実行すると、perlスクリプトプロセスが 'S'状態で表示されます。このperlプロセスがスリープ状態になっているのはなぜですか、そしてそれを起動する方法はありますか?perlスクリプトの行でより多くの洞察を与えて「S」状態にするためのデバッグ方法。


7
各行を複数回繰り返します
ファイル内の各行を一定回数繰り返したいと思います。 たとえば、各行を4回繰り返します。 a b c になる: a a a a b b b b c c c c 私はいくつかの検索を行いましたが、逆の行に沿って多くの質問と回答があります。たとえば、重複する行を単一の行にマージしたり、再度印刷して行を2倍にしたりします。 Cでこれを行うのは簡単ですが、ネイティブコマンドについてもっと詳しく知りたいので、このような1回限りのスローアウェイにいつも頼る必要はありません。

4
ターミナルを開き、9つのターミナルに分割し、1つのスクリプトを使用してそれらを切り替える方法
ターミナルを開き、9個の部分(3x3)に分割してbashスクリプトを実行したいと思います。ただし、各端末部分ごとに異なるスクリプトがあります。 これは、perl、python、またはbashを使用しても実行できますか? キーボードショートカットを使用せずにこれらの小さな端末を切り替えるにはどうすればよいですか? ああ、ところで、私はを使用していterminatorます。そして、そのような機能を有効にする他の端末エミュレータがある場合、それはどれですか?

3
ファイル内の複数行の文字列を置換
ある複数行の文字列を別の複数行の文字列で置き換えることにより、更新したいファイルがいくつかあります。以下の線に沿ったもの: * Some text, * something else * another thing そして、私はそれを次のものに置き換えたいです: * This is completely * different text 結果は、置換後、テキストの最初のブロックを含むファイルに2番目の文字列が含まれるようになります(ファイルの残りの部分は変更されません)。 問題の一部は、ファイルシステムで更新するファイルのリストを見つける必要があることです。私はそのためにgrepを使用することができます(複数行の文字列を使用するのは簡単ではありませんが)sedでパイプすることができますか? これを行う簡単な方法はありますか?Sedはオプションですが、\ nなどを追加する必要があるため厄介です。「このファイルから入力を取得し、それらのファイルで一致させてから、この他のファイルのコンテンツで置き換える」と言う方法はありますか?必要に応じてpythonを使用できますが、すばやく簡単なものが必要なので、利用可能なユーティリティがある場合は、独自のスクリプト(方法を知っています)を作成するよりもむしろそれを使用します。

2
特定のPIDが実行されているかどうかを確認するにはどうすればよいですか?
ログファイルを解析してPIDを収集し、そのPIDが実行されているかどうかを確認するPerlスクリプトを作成しています。私はそのチェックを行うための最良の方法を考えようとしています。明らかに、私は次のようなことができます: system("ps $pid > /dev/null") && print "Not running\n"; ただし、可能な場合はシステムコールを避けたいと思います。そのため、/procファイルシステムを使用できると考えました(移植性は問題ではありません。これは常にLinuxシステムで実行されます)。例えば: if(! -d "/proc/$pid"){ print "Not running\n"; } それは安全ですか?/proc/$pid/ディレクトリがない場合、関連するPIDが実行されていないと常に想定できますか?AFAIK ps自体は/procとにかくその情報を取得するので、私はそう期待していますが、これは本番コード用であるため、確実にしたいです。 それで、実行中のプロセスに/proc/PIDディレクトリがない場合や、/proc/PIDディレクトリが存在し、プロセスが実行されていない場合がありますか?psディレクトリの存在を確認するよりも解析を好む理由はありますか?

4
異なるファイルの2つの列を比較し、一致する場合に出力する
Solaris 10を使用しているため、-fを含むgrepオプションは機能しません。 パイプで区切られた2つのファイルがあります。 file1: abc|123|BNY|apple| cab|234|cyx|orange| def|kumar|pki|bird| ファイル2: abc|123| kumar|pki| cab|234 file2の最初の2列をfile1と比較したい(最初の2列でfile1の内容全体を検索する)場合、file1の一致する行を印刷します。次に、ファイル2の2行目などを検索します。 期待される出力: abc|123|BNY|apple| cab|234|cyx|orange| 私が持っているファイルは巨大で、約400,000行を含んでいるので、実行を速くしたいと思います。

5
列のタイムスタンプを日付に変換するにはどうすればよいですか?
これを含むファイルがあります: 1415602803,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22 1415602807,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22 1415602811,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22 1415602815,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22 タイムスタンプをこの形式の日付に変換したい: 2014-11-10 02:00:03,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22 2014-11-10 02:00:07,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22 2014-11-10 02:00:11,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22 2014-11-10 02:00:15,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22 どうやってやるの? 私はこれが機能することを知っています:(この質問perl -pe 's/(\d+)/localtime($1)/e'から)しかし、出力形式はです。Mon Nov 10 02:00:03 2014 このコマンドでタイムスタンプを目的の出力に変換できることはわかっていますdate -d@1415602803 +"%F %H:%M:%S"が、すべての引用符などのために、それをawk使用して動作させることはできませんでしたsystem("cmd")。

5
行の順序を維持しながら重複行を削除する
[root@server]# awk '!seen[$0]++' out.txt > cleaned awk: (FILENAME=out.txt FNR=8547098) fatal error: internal error Aborted [root@server]# 「サーバー」には、8ギガバイトのRAM + 16ギガバイトのスワップ、x> 300ギガバイトの空き領域、amd64、デスクトップCPUがあります。Scientific Linux 6.6。LOADを作成するために他に何も実行されません。数秒後にawkは異常終了します。out.txtは約1.6ギガバイトです。GNU Awk 3.1.7。 質問:行の順序を維持しながら重複行を削除するにはどうすればよいですか?大文字と小文字の区別も重要です。例:「A」と「a」は2つの異なる行で、保持する必要があります。ただし、「a」と「a」は重複しています。最初の1つだけが必要です。 答えは何でも構いません.. awkがこれに向いていない場合.. perl / sed ..問題は何でしょうか [root@server]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file …

6
2つの括弧の間の文字列を出力します
私はこれらの行を持つファイルを持っています G8 = P(G1,G3) G9 = P(G3,G4) G12 = P(G2,G9) G15 = P(G9,G5) G16 = P(G8,G12) G17 = P(G12,G15) 出力が必要です G1,G3 G3,G4 ..... sed / grepコマンドまたはperlを使用してどうすればよいですか?
14 sed  grep  perl 

7
ファイルから複数の空白行を削除する方法は?
メモを作成するために使用するテキストファイルがいくつかあります-単なるプレーンテキストで、通常は単にを使用しcat >> fileます。ときどき、空白行または2行(ちょうど戻る-改行文字)を使用して、新しい主題/思考の行を指定します。各セッションの最後に、Ctrl+ Dでファイルを閉じる前に、通常、セッションを分離するためだけに多く(5〜10)の空白行(リターンキー)を追加します。 これは明らかにあまり賢いものではありませんが、この目的には役立ちます。しかし、私はたくさんの不要な空白行で終わるので、余分な行(のほとんど)を削除する方法を探しています。いくつかのオプションで直接使用できるLinuxコマンド(カット、貼り付け、grep、...?)はありますか?また、誰かがsed、awkまたはperl(私はsedまたはawkが好きですが、実際にはスクリプト言語でも)のスクリプトを考えていますか?C ++で何かを書く(実際に自分でできる)のは、やり過ぎのように思えます。 ケース#1:必要なのは、連続する2行以上(3行以上)の空白行を削除し、それらを2行だけの空白行に置き換えるスクリプト/コマンドです。ただし、複数の行(2行以上)を削除したり、複数の空白行を1つの空白行に置き換えたりできるように調整できると便利です。 ケース#2:2行のテキスト間の単一の空白行を削除するスクリプト/コマンドを使用することもできますが、複数の空白行をそのまま残します(ただし、空白行の1つを削除してもかまいません)。
14 scripting  sed  awk  perl  filter 

2
欠損値の空白スペースをゼロに置き換える
約30K行のinput.txtタブ区切りテキストファイルがあります。各行(s1..s30K行)で欠損値(つまり、空白)をチェックし、欠損値にゼロ値を入力します。out.txtを参照してください。 input.txt id no1 no2 no3 no4 s1 23 34 45 12 s2 4 4 s3 4 8 0 out.txt id no1 no2 no3 no4 s1 23 34 45 12 s2 0 4 4 0 s3 4 0 8 0

2
grepのコンテキスト「group-separator」として空行を使用する
コンテキスト、色、およびグループ区切りとして空白行を含むgrep出力が必要です。この質問では、customの定義方法を学びgroup-separator、次のようにgrepコマンドを作成しました。 grep --group-separator="" --color=always -A5 しかし、グループセパレータは実際には空ではなく、代わりに色コード(つまり[[36m[[K[[m[[K)が含まれています。これは、私が使用しているためです--color=always。しかし、grepコマンドには色が必要で、セパレーターは空白行にする必要があります(さらに処理するため) これら2つの条件をどのように組み合わせることができますか?
12 grep  perl  colors 

3
perl -iをシンボリックリンクでなくする方法はありますか?
私の友人は、あなたがそうするなら: perl -pi.bak -e 's/foo/bar/' somefile 「somefile」が実際にシンボリックリンクである場合、perlはドキュメントが行うと言っていることを実行します。 入力ファイルの名前を変更し、元の名前で出力ファイルを開き、その出力ファイルをprint()ステートメントのデフォルトとして選択することにより、これを行います。拡張子が指定されている場合、その拡張子を使用して、古いファイルの名前を変更し、バックアップコピーを作成します[...] これにより、変更されていない実ファイルを指す新しいシンボリックリンク "somefile.bak"と、変更された新しい変更された通常ファイル "somefile"が作成されます。 多くの場合、シンボリックリンクをたどるのは望ましい動作です(たとえ.bakファイルの正しい場所があいまいなままであっても)。ラッパー内のシンボリックリンクをテストし、適切にケースを処理する以外に、これを行う簡単な方法はありますか? (sedそれが価値があることのために、同じことをします。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.