Tag: unix

使用awk substr获取最后一个字段

我有一个简单的要求如下, 获取绝对目录的文件名。 例如/home/parent/child/filename 我的要求是从这个剪切文件名。 我所尝试的是: awk -F "/" '{print $5}' input 这完美的作品。 但是这里的硬编码是$5 ,如果我的input结构如下所示,这可能会有所不同: /home/parent/child1/child2/filename 所以它应该是dynamic的,没有硬编码。 这是逻辑: 总是把最后一个字段作为文件名(所以需要从后面检查)。 任何人都可以帮助我与awk substrfunction或任何其他function?

从文件中随机选取行而不用Unix啜食它

我有一个10 ^ 7行文件,我想从文件中随机select1/100行。 这是我所拥有的AWK代码,但是它可以在手边浏览所有的文件内容。 我的电脑内存不能处理这样的诽谤。 还有其他的方法吗? awk 'BEGIN{srand()} !/^$/{ a[c++]=$0} END { for ( i=1;i<=c ;i++ ) { num=int(rand() * c) if ( a[num] ) { print a[num] delete a[num] d++ } if ( d == c/100 ) break } }' file

从输出中去除颜色

我有一些脚本产生的颜色,我需要摆脱这一点。 #!/bin/bash exec > >(tee log) # redirect the output to a file but keep it on stdout exec 2>&1 ./somescript 输出是(在日志文件中): java (pid 12321) is running…@[60G[@[0;32m OK @[0;39m] 我不知道如何把ESC字符放在这里,所以我把@放在了原位。 我将脚本改为: #!/bin/bash exec > >(tee log) # redirect the output to a file but keep it on stdout exec 2>&1 ./somescript | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" […]

“set -x”是做什么的?

我有一个shell脚本,其中包含以下行: [ "$DEBUG" == 'true' ] && set -x

你能阻止命令进入bash shell命令历史吗?

有没有办法阻止命令被添加到bash shell的命令历史? 我希望能够防止某些“危险的”命令被添加到历史logging中,例如“ rm -rf ~/some/dir ”,以便按下向上箭头不能访问命令。 这样,不可能不经意地重复其中的一个命令。 我之所以问,是因为我使用向上的箭头来访问shell历史中的先前的命令,而且经常发现自己打开了我认为是正确的命令的东西,只是意识到我正要做点什么愚蠢/烦人/危险。 我不喜欢在我的shell历史中浮现出来的想法,等着我踩到它们! (注意:我知道可以在HISTIGNORE中设置模式,但是可以在每个命令的基础上应用一些东西,这将会是一个好习惯,除非有一个聪明的方法来使用HISTIGNORE我错过了?)

fork()如何知道何时返回0?

以下面的例子: int main(void) { pid_t pid; pid = fork(); if (pid == 0) ChildProcess(); else ParentProcess(); } 所以纠正我,如果我错了,一旦fork()执行一个subprocess创build。 现在通过这个答案 fork()返回两次。 这是一次为父进程,一次为subprocess。 这意味着两个独立的进程在fork调用期间生成,而不是在结束之后生成。 现在我不明白它如何理解如何为subprocess返回0和为父进程正确的PID。 这在哪里变得非常混乱。 这个答案指出fork()通过复制进程的上下文信息并手动将返回值设置为0来工作。 首先我正确地说,返回任何函数都放在一个寄存器中? 由于在单个处理器环境中,一个进程只能调用一个只返回一个值的子例程(如果我在这里错了,请纠正我)。 比方说,我在一个例程中调用一个函数foo(),该函数返回一个值,该值将被存储在一个寄存器中,比如BAR。 每次函数想要返回一个值,它都将使用一个特定的处理器寄存器。 所以,如果我能够手动更改过程块中的返回值,我可以更改返回到该function的值? 所以我正确地认为fork()是如何工作的?

将输出写入日志文件和控制台

在Unix shell中,我有一个env文件( env文件定义了运行用户脚本所需的参数,如日志文件名和path,将输出和错误redirect到日志文件,数据库连接详细信息等 ),redirect所有的输出)和使用以下代码从执行的脚本的日志文件错误: exec 1>>${LOG_FILE} exec 2>>${LOG_FILE} env文件在每个脚本的开始处执行。 由于env文件中的上述代码,所有可能是用户输出或错误的控制台输出都会直接输出到日志文件,而这正是我真正需要的。 但有一些select性的用户输出,我想在控制台和日志文件中显示。 但是由于上面的代码,我无法做到这一点。 我知道,如果我删除上面的代码,我可以得到所需的结果,但我将不得不手动写入所有其他输出到日志文件,这不是一件容易的事情。 有没有办法在控制台和日志文件中获取输出而不删除上述代码?

合并PNG图像到一个PDF文件

我怎样才能将几个PNG文件合并到一个PDF文件在Unix?

unix – 文件中的列数

给定一个像这样的数据文件(即stores.dat文件) sid|storeNo|latitude|longitude 2|1|-28.03720000|153.42921670 9|2|-33.85090000|151.03274200 什么是一个命令来输出列名的数量? 即在上面的例子中,它将是4.(第一行中的pipe道字符数+1) 我在想像这样的东西: awk '{ FS = "|" } ; { print NF}' stores.dat 但它会返回所有的行而不是第一行,而第一行则返回1而不是4

哪个terminal命令得到只是IP地址,没有别的?

我试图在我写的脚本中只使用IP地址(inet)作为参数。 有一个简单的方法在unixterminal获取IP地址,而不是通过查看ifconfig ?