Articles of awk

用awk或sedreplace和增加字母和数字

我有一个包含的string fastcgi_cache_path /var/run/nginx-cache15 levels=1:2 keys_zone=MYSITEP:100m inactive=60m; 这个脚本的目标之一就是根据前一个文件的值查找来增加nginx-cache的两位数字。 为了做到这一点,我使用这个代码: # Replace cache_path PREV=$(ls -t /etc/nginx/sites-available | head -n1) #find the previous cache_path number CACHE=$(grep fastcgi_cache_path $PREV | awk '{print $2}' |cut -d/ -f4) #take the string to change SUB=$(echo $CACHE |sed "s/nginx-cache[0-9]*[0-9]/&@/g;:a {s/0@/1/g;s/1@/2/g;s/2@/3/g;s/3@/4/g;s/4@/5/g;s/5@/6/g;s/6@/7/g;s/7@/8/g;s/8@/9/g;s/9@/@0/g;ta};s/@/1/g") #increment number sed -i "s/nginx-cache[0-9]*/$SUB/g" $SITENAME #replace number 也许不是那么优雅,但它的作品。 另一个目标是增加所有出现的MYSITE x的最后一个字母( MYSITEP ,在这种情况下,应该变成MYSITE […]

pipe道连续stream到多个文件

我有一个程序将连续运行写输出到标准输出,我想不断从它的最后一组输出,并将其写入一个文件。 每次有一组新的输出,我想覆盖相同的文件。 一个例子是以下命令: iostat -xkd 5 每5秒钟打印一些输出,每一个输出一个空行。 我希望最后的“集合”被写入一个文件,我认为这应该可以通过一些简单的事情来实现。 到目前为止,我已经尝试过使用xargs,我只能用一行代码来完成这个工作,而不是由一些由某些东西划定的行。 我认为这可能与awk,但我不知道如何让它缓冲数据,因为它可以写出它使用系统,或让它closures并重新打开相同的输出文件。 编辑 :澄清,这是一个连续运行的单一命令。 我不想开始一个新的命令,并阅读它的输出。 解 我调整了@Bittrance的答案来得到以下结果: iostat -xkd 5 | (while read r; do if [ -z "$r" ]; then mv -f /tmp/foo.out.tmp /tmp/foo.out else echo "$r" >> /tmp/foo.out.tmp fi done) 这基本上是相同的,除了检测“部分”的结束和写入临时文件,以便每当外部进程试图读取输出文件将完成。

如何在Linux中使用awk或sed进行算术运算并将结果传送到文件

有这个问题,我正在用墙打我的头,请帮忙。 我有两个文件Sheetthickness.k,其中包含一个初始厚度值和minThick.k,其中包含最终厚度只有一个单一的数字。 我想计算厚度的百分比减less,所以我用。 fina="$(cat minThick.k)"; echo $fina init="$(cat Sheetthickness.k)"; echo $init echo |awk "{ print ($init-$fina)/($init) }" > LSDynaResponse.txt 在没有其他命令的shell中,文件已经存在,那么它可以很好地工作,但是当这些文件是由软件创build的,然后使用这些命令的时候,就会出错。 awk: { print (-)/() } awk: ^ syntax error awk: { print (-)/() } awk: ^ syntax error awk: { print (-)/() } awk: ^ unterminated regexp 任何其他优雅的方式来做这个任务?

如何在Linux中search两个不同date的日志文件

我正在使用基于RPM的发行版,并且我想dynamicsearch日志文件以查看当天的date和昨天的date以输出报告。 string必须是dynamic的(没有egrep“\ b2012-10- [20-30] \ b”),这意味着我可以采取相同的单行或脚本,search今天的date和昨天的date的文件,并打印一些输出。 基本上search日志文件的特定条目。 这是我得到的,但我想用dynamic的东西来取代egrep: grep "No Such User Here" /var/log/maillog | egrep "\b2012-10-2[3-4]\b" | cut -d "<" -f 3 | egrep -o '\b[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}\b' | cut -d "@" -f 2 | sort -d |uniq -ci | awk -F" " '{ print "Domain: " $2 " has been sent " $1 " messages […]

我怎样才能取代在Linux中的特定文件夹中find的所有电子邮件地址

我在一些文件夹中有一些脚本。 像/var/www/sites 现在我想要replace所有文件夹和子文件夹中的脚本中硬编码的所有电子邮件地址,并replace为我的电子邮件地址 我怎样才能做到这一点。 我可以find使用 grep -rn "abc@gmail.com" /var/www/sites/ 但我不知道如何使用正则expression式和replace

如何用awk比较Linux中多个文件中的两列

我有这个代码 [motaro@Cyrax ]$ awk '{print $1}' awk1.txt awk2.txt line1a line2a file1a file2a 它显示了这两个文件中的ccolumns 我怎样才能find$1(of file 1)和$1(of file2) $1(of file 1) $1(of file2) ,分开

sed两种模式search,并在第二种模式发生后追加线

以下sed问题在过去的两天里给了我很多的麻烦。 我有以下文件(iptables) : someline someline *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] someline 我想使用sedsearch模式*filter ,如果匹配,然后search第二个模式[0:0] ,然后在第二个模式的最后一次出现后添加一行。 这(理想情况下)会导致: someline someline *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] TESTLINEADDEDBYSED someline 这里的论坛给了我一个好的开始,但是我不能解决这个具体问题。 我到目前为止有以下解决scheme,但它添加第一个出现的第二个模式[0:0] : sed -n '/\*filter/{:a;N;/^\n/s/^\n//;/\[0:0\]/{!ba;p;s/.*/TESTLINEADDEDBYSED/;};ba}; p' file 我是在第二个分支我会消耗(读:skip?)第一次出现[0:0]的假设.* 我在这里误解了什么?

解决方法,当它用pipe道从grep不同的模式pipe道几行?

这是一个正在进行的工作,我正在寻找更多知识的人的build议(电脑是我的爱好,而不是我的专业)。 这个脚本是为了组织一个电视节目目录(把每个文件重命名为Ep1ode.ext的惯例S01E01.Title,并创build一个原始名称的符号链接)。 我喜欢写这篇文章,我不希望别人花太多时间。 我想现在我最大的“走狗”是: 修复grep + cut输出中“<_a href =”(减去下划线)的发生。 用wiki中的awk抓取正确的文本块(根据季节#) (如果有什么看起来效率低下,请让我知道 – 我正在学习) 我一直在左右这些论坛上,随着我的进展而取得进展。 我已经用尽了大部分类似的问题。 (这些论坛是我build立这个目标的100%)。 ## Find show name and season (directories nested: /show/season) show1=$(cd .. ; pwd) show="${show1##*/}" season=("${PWD##*/}") IFS=$'\n' ## Download list of episodes for given season wget -q -O- –header\="Accept-Encoding: gzip" https://en.wikipedia.org/wiki/List_of_$show\_episodes | gunzip > tmp.html ## Working on first awk/sed […]

parsinglog4j和Javaexception日志

我有以下格式的错误日志: 2014-01-30 16:15:04:720 GMT [commandHandler-thread-3] ERROR com.example.Main 123-1234567-1234567 – Something bad happened. java.lang.RuntimeException: Something bad happened. at … Caused by: java.lang.RuntimeException: … at … at … … 13 more Caused by: java.lang.RuntimeException: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update at … at … … 18 more Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update […]

如何在awk中input一个系统(“pwd”)的文本?

请耐心等待,因为我对shell脚本和awk很陌生。 我一直在试图创build一个播放列表来播放Mplayer中的一些音乐,但只有在指定每个文件的完整path时才能使用。 我一直在尝试设置一个小脚本,在每个文件名之前插入$ pwd的输出并将其写入播放列表,如下所示: ls | awk '{system("pwd") | getline x; grep -v 0; gsub("\n",""); print x"/"$1}' > playlist.txt (grep是摆脱系统(“pwd”)的“0”状态输出)。 但是,在x中有一个换行符,所以我得到输出 /home/(directory) /Song_1.mp3 /home/(directory) /Song_2.mp3 我想要的是 /home/(directory)/Song_1.mp3 /home/(directory)/Song_2.mp3