Questions tagged «perl»

Perl是一种高级通用,解释性动态编程语言。它最初是由拉里·沃尔(Larry Wall)开发的,是一种通用的Unix脚本语言,旨在简化报表的处理。在开放源代码社区的支持下,经过一段时间,它已经发展并成熟,可用于图形编程,系统管理,网络编程,财务。 ,生物信息学和其他工程应用。

9
使用“ while true”来保持脚本存活是个好主意吗?
我只是从另一个世界跳到Unix,想知道是否 while true do /someperlscript.pl done perl脚本本身内部具有一个文件夹/文件监视程序,当在目标位置中更改文件时将执行该文件夹/文件监视程序。 这(while true)个好主意吗?如果不是,那么首选的可靠方法是什么? TIA 编辑:由于这似乎已经引起了一定的兴趣,这里是完整的方案。perl脚本本身使用文件监视程序监视目录。收到新文件(它们通过rsync到达)后,它将拾取新文件并进行处理。现在,传入的文件可能已损坏(不要问..来自树莓派),有时该进程可能无法对其进行处理。我不知道为什么,因为我们还不了解所有情况。 但是-如果该进程确实由于某种原因失败,我们希望它能够启动并运行并处理下一个文件,因为下一个文件与可能导致错误的上一个文件完全无关。 通常,我会使用某种形式的catch all并将所有代码包装在它周围,以免它崩溃。但是不确定perl。 据我了解,使用诸如supervisor之类的方法是一种很好的方法。
19 shell  perl 



7
每行重复多次
希望文件中的每一行重复固定的次数。 例如,每行重复四次: a b c 变成: a a a a b b b b c c c c 我已经进行了一些搜索,沿着反向进行的过程中有很多问题和答案,例如,将重复的行合并为单行,也许还有一些关于通过再次打印将行加倍的问题。 在C语言中这样做很容易,但是我希望我对本机命令有更多的了解,因此我不必一直使用这种一次性的方法。

4
如何打开终端,拆分为9个终端并使用一个脚本在它们之间切换?
我想打开一个终端,将其拆分成可以说的9个部分(3x3),然后执行一些bash脚本。但是对于每个终端部分,不同的脚本。 可以使用perl,python甚至bash来完成吗? 如何在不使用键盘快捷键的情况下在这些小终端之间切换? 哦,顺便说一句,我正在使用terminator。如果还有其他支持这种功能的终端仿真器,那是什么?

3
替换文件中的多行字符串
我有许多文件想要通过用另一个多行字符串替换一个多行字符串来更新。类似于以下内容: * Some text, * something else * another thing 我想替换为: * This is completely * different text 结果将是,替换后包含第一个文本块的文件现在将包含第二个字符串(文件的其余部分保持不变)。 问题的一部分是,我必须在文件系统中找到要更新的文件列表。我想我可以为此使用grep(尽管再次使用多行字符串不是那么容易),然后将其通过sed传送吗? 是否有捷径可寻?sed是一个选项,但是很尴尬,因为我必须添加\ n等。是否有办法说“从此文件中获取输入,在这些文件中进行匹配,然后用另一个文件的内容替换”?我可以在需要时使用python,但是我想要快速简单的方法,因此,如果有可用的实用程序,我宁愿使用它而不是编写自己的脚本(我知道该怎么做)。

2
如何检查给定的PID是否正在运行?
我正在编写一个Perl脚本,该脚本分析日志文件以收集PID,然后检查该PID是否正在运行。我正在尝试最好的检查方法。显然,我可以这样做: 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
比较不同文件的两列并打印是否匹配
我正在使用Solaris 10,因此涉及-f的grep选项不起作用。 我有两个管道分隔的文件: 文件1: abc|123|BNY|apple| cab|234|cyx|orange| def|kumar|pki|bird| 文件2: abc|123| kumar|pki| cab|234 我想将file2的前两列与file1进行比较(在前两列中搜索file1的全部内容),如果它们匹配,则打印出file1的匹配行。然后搜索文件2的第二行,依此类推。 预期产量: abc|123|BNY|apple| cab|234|cyx|orange| 我的文件很大,包含大约40万行,因此我想加快执行速度。

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 GB RAM + 16 GB SWAP,x> 300 GB可用空间,amd64,台式机CPU。科学Linux 6.6。没有其他东西可以使它加载。Awk在几秒钟后中止。out.txt为〜1.6 GB。GNU Awk 3.1.7。 问题:如何在保持行顺序的同时删除重复的行?大小写也很重要,例如:“ A”和“ a”是两个不同的行,必须保留它。但是“ a”和“ a”是重复的,只需要第一个。 答案可能在任何情况下..如果awk对此不利。.那么perl / sed ..可能是什么问题? [root@server]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, …

6
在两个括号之间打印字符串
我有这些行的文件 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。有时我使用一两行空白(仅返回-换行符)来指定新的主题/思路。在每个会话结束时,在用Ctrl+ 关闭文件之前D,我通常添加很多(5-10)空行(返回键)以分隔会话。 这显然不是很聪明,但是它对我有用。我做不过最终了很多很多不必要的空行,所以我在寻找一种方式来删除(大部分)的额外线。是否有Linux命令(剪切,粘贴,grep,...?)可以直接与几个选项一起使用?或者,是否有人对sed,awk或perl(可以在任何脚本语言中使用,尽管我更喜欢sed或awk)的脚本都能满足我的需求?用C ++编写某些东西(我实际上可以自己做),似乎有点过头了。 情况1:我需要的是一个脚本/命令,该脚本/命令将删除多于两个(3个或更多)连续的空行,并将其替换为仅两个空行。尽管也可以对其进行调整以删除多于一行(两行或更多)和/或仅用一个空白行替换多个空白行,这是很好的。 情况2:我还可以使用脚本/命令来删除两行文本之间的单个空白行,但照原样保留多个空白行(尽管删除其中一个空白行也是可以接受的)。
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的上下文“组分隔符”
我需要grep输出以及上下文,颜色和空白行作为组分隔符。在这个问题中,我学习了如何定义custom group-separator,并构造了grep命令,如下所示: grep --group-separator="" --color=always -A5 但实际上组分隔符不是空的,而是仍然包含颜色代码(即[[36m[[K[[m[[K)。这是因为我正在使用--color=always。但是我的grep命令需要颜色,并且分隔符必须为空行(以供进一步处理) 如何结合这两个条件?
12 grep  perl  colors 

3
有没有办法使perl -i不破坏符号链接?
我的一个朋友指出,如果您这样做: perl -pi.bak -e 's/foo/bar/' somefile 当“ somefile”实际上是一个符号链接时,perl会按照文档所说的去做: 它通过重命名输入文件,使用原始名称打开输出文件并选择该输出文件作为print()语句的默认值来做到这一点。该扩展名(如果提供)用于修改旧文件的名称以制作备份副本[...] 这将导致指向未更改的实际文件的新符号链接“ somefile.bak”,以及具有更改的新的已更改常规文件“ somefile”。 在许多情况下,遵循符号链接将是理想的行为(即使它使.bak文件的正确位置不明确)。除了测试包装器中的符号链接并适当处理大小写以外,还有其他简单的方法吗? (sed做同样的事情,这是值得的。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.