Articles of shell

bash:从频率表中获取百分比

我已经做了一个小的bash脚本,以获得在一个文件的某一列的项目的频率。 输出会是这样的 A 30 B 25 C 20 D 15 E 10 我在脚本中使用的命令是这样的 cut -f $1 $2| sort | uniq -c | sort -r -k1,1 -n | awk '{printf "%-20s %-15d\n", $2,$1}' 我怎样才能修改它以显示每种情况下的相对百分比。 所以它会是这样的 A 30 30% B 25 25% C 20 20% D 15 15% E 10 10%

为什么shell在后台进程中忽略SIGINT和SIGQUIT?

如果我在脚本或-c片段中背景进程,后台进程将忽略SIGINT和SIGQUIT: 例: $ alias ps='ps -o pid,ppid,pgrp,sid,stat,tty,ignored,blocked,caught,wchan,min_flt,pmem,args –forest' $ sh -c 'sleep 1000 & sleep 1000 | sleep 1000' & \ sleep 0.01; ps |grep -v -e ps -e grep PID PPID PGRP SID STAT TT IGNORED BLOCKED CAUGHT WCHAN MINFL %MEM COMMAND 6197 2143 6197 6197 Ss pts/28 0000000000380004 0000000000010000 000000004b817efb wait 10039 0.0 […]

bash:迭代通过索引select的JSON数组的成员

我使用jq来parsingJSON文件,将每个JSON数组抽取到一个shell数组中。 我目前的代码如下所示: for ((i = 0; i < ${#nvars[@]}; i++)); do v1=($(cat $INPUT | jq '."config"[i]."var1"[]')) echo $v1 done 错误信息: error: i is not defined 我也换了 v1=($(cat $INPUT | jq '."config"[i]."var1"[]')) 同 v1=($(cat $INPUT | jq '."config"[$i]."var1"[]')) 还是行不通。 任何想法? 任何帮助表示赞赏! 编辑:示例input数据 { "config-vars":[ { "var1":["v1","v2"], "var2":"" }, { "var1":["v3",""], "var2":"v4" } ] }

Linux shell的音译脚本

我有多个.txt文件包含字母表中的文本; 我想把文字音译成另外一个字母; 字母1的一些字符与字母2的字符是1:1(即a变成e ),而另一些字符是1:2(即x变成ch )。 我想用Linux shell的一个简单的脚本做这个。 与TR或SED我可以转换1:1字符: sed -fy/abcdefghijklmnopqrstuvwxyz/nopqrstuvwxyzabcdefghijklm/ a会变成n , b会变成o等等(我认为是凯撒的密码) 但是我怎样才能处理1:2的字符?

使用tee命令将输出redirect到不存在的目录中的文件

我正在尝试使用tee命令将输出redirect到一个文件,并且我想要在尚未创build的目录中创build该文件。 date | tee new_dir/new_file 当new_dir不在那里时,tee命令失败 tee:new_dir / new_file:没有这样的文件或目录 如果在运行tee命令之前创buildnew_dir,那么它可以正常工作,但由于某种原因,我不想手动创buildnew_dir,是否可以使用tee命令创buildnew_dir?

包含命令输出的variables的Shell脚本打印内容删除换行符

我正在编写一个shell脚本,它将命令的输出存储在variables中,处理输出,并稍后回显结果。 这是我得到的: stuff=$(diff -u pens tape) # process the output echo $stuff 问题是,从运行脚本得到的输出是这样的: — pens 2009-09-27 10:29:06.000000000 -0400 +++ tape 2009-09-18 16:45:08.000000000 -0400 @@ -1,4 +1,2 @@ -highlighter -marker -pencil -POSIX +masking +duct 而我期待这样的: — pens 2009-09-27 10:29:06.000000000 -0400 +++ tape 2009-09-18 16:45:08.000000000 -0400 @@ -1,4 +1,2 @@ -highlighter -marker -pencil -POSIX +masking +duct 它看起来像换行符被删除。 […]

从github下载tarball而不curl

我有一个embedded式系统,我不能安装任何东西,唯一的工具,我可能用来获取的东西是wget。 事实certificate,你不能用wget做同样的事情,你可以用curl来做。 我也不能交叉编译这个系统,所以我需要求助于Python或shell脚本。 有一个名为Dulwich的git的纯Python实现实际上有一些我需要交叉编译的C代码…所以我甚至用这个方法来看看这个,FYI。 我需要的是从github仓库获取代码,显而易见的解决scheme是使用他们提供的tarball。 我通常复制链接从存储库页面下载zipbutton,并使用授权令牌,而不是用户名和密码。 它的工作原理很简单,就像这样: curl -L https://<token>@github.com/<org|user>/<repo>/archive/master.tar.gz | tar xz 事实certificate,wget是更尴尬,无论我尝试只是工作。

./a.out的redirect不捕获分段错误

我运行命令 ./a.out <in&> output.txt 我也想把错误放在output.txt 。 命令的exit状态是139,在terminal输出的是: 分割故障(核心转储) 和output.txt文件是空的。

为什么unix读取时不读最后一行?

我的脚本 export IFS=":" cat hello | while read abcd; do echo $a,$b,$c,$d done 我的文件hello 1:1:1:1 2:2:2:2 3:3:3:3 我的输出 1,1,1,1 2,2,2,2 如果我在3:3:3:3之后input一个空行,那么输出就变成了 1,1,1,1 2,2,2,2 3,3,3,3 任何人都知道我可以如何解决这个问题,所以我不需要在你最后一个空行?

如何处理shell脚本中的错误/exception?

下面是我在bash中执行的脚本。 它工作正常。 fileexist=0 for i in $( ls /data/read-only/clv/daily/Finished-HADOOP_EXPORT_&processDate#.done); do mv /data/read-only/clv/daily/Finished-HADOOP_EXPORT_&processDate#.done /data/read-only/clv/daily/archieve-wip/ fileexist=1 done 问题陈述:- 在我上面的shell脚本中必须每天使用cron job运行,我没有任何error/exception handling mechanism 。 假设有什么不对的地方,我不知道发生了什么事情? 在执行上面的脚本之后,还有some other scripts that will be dependent on the data provided by above script ,所以我总是从其他依赖脚本数据的人那里投诉,发生了错误。 那么有什么办法可以get notified if anything wrong has happened在我的脚本中get notified if anything wrong has happened了get notified if anything wrong has […]