最佳Awk命令

最佳Awk命令,awk,Awk,我觉得AWK真的很有用。这是我用来处理数据的一行代码 ls | awk '{ print "awk " "'"'"'" " {print $1,$2,$3} " "'"'"'" " " $1 ".old_ext > " $1 ".new_ext" }' > file.csh 我使用这个AWK创建了一个脚本文件,可以重命名一些文件,并且只打印出选择性的列。有人知道更好的方法吗?你最擅长的AWK一行程序还是巧妙的操作?Henry Spencer在AWK上写了一个相当好的nr

我觉得AWK真的很有用。这是我用来处理数据的一行代码

ls | awk '{ print "awk " "'"'"'"  " {print $1,$2,$3} " "'"'"'"  " " $1 ".old_ext > " $1    ".new_ext"  }' > file.csh

我使用这个AWK创建了一个脚本文件,可以重命名一些文件,并且只打印出选择性的列。有人知道更好的方法吗?你最擅长的AWK一行程序还是巧妙的操作?

Henry Spencer在AWK上写了一个相当好的nroff实现。他称之为“awf”。他还声称,如果Larry Wall知道awk有多强大,他就不需要发明perl了。

以下是我经常使用的几个awk。。。请注意,您可以使用$1、$2等来获取所需的列。所以,对于操纵一堆文件,例如,这里有一个愚蠢的命令,你可以用它来代替mv

ls -1 *.mp3 | awk '{printf("mv %s newDir/%s\n",$1,$1)}' | /bin/sh
或者如果你在看一组过程,也许

ps -ef | grep -v username | awk '{printf("kill -9 %s\n",$2)}' | /bin/sh

非常琐碎,但你可以看到这会给你带来很多好处我以前做的大多数事情都可以使用xargs,但是,谁需要它们呢?新的命令?

有很多很好的例子。它们以前是从(现在是404s)下载的。

我经常使用这个脚本来编辑路径和类似路径的环境变量。 用法:

此命令在路径前面添加/new/bin和/other/bin,从路径中删除/old/bin和/other/old/bin(如果存在,则无错误),并删除路径上的重复目录项

:   "@(#)$Id: clnpath.sh,v 1.6 1999/06/08 23:34:07 jleffler Exp $"
#
#   Print minimal version of $PATH, possibly removing some items

case $# in
0)  chop=""; path=${PATH:?};;
1)  chop=""; path=$1;;
2)  chop=$2; path=$1;;
*)  echo "Usage: `basename $0 .sh` [$PATH [remove:list]]" >&2
    exit 1;;
esac

# Beware of the quotes in the assignment to chop!
echo "$path" |
${AWK:-awk} -F: '#
BEGIN       {       # Sort out which path components to omit
                    chop="'"$chop"'";
                    if (chop != "") nr = split(chop, remove); else nr = 0;
                    for (i = 1; i <= nr; i++)
                            omit[remove[i]] = 1;
            }
{
    for (i = 1; i <= NF; i++)
    {
            x=$i;
            if (x == "") x = ".";
            if (omit[x] == 0 && path[x]++ == 0)
            {
                    output = output pad x;
                    pad = ":";
            }
    }
    print output;
}'
:“@(#)Id:clnpath.sh,v1.6 1999/06/08 23:34:07 jleffler Exp$”
#
#打印$PATH的最低版本,可能会删除某些项目
案例$#in
0)chop=“”;路径=${path:?};;
1) chop=“”;路径=$1;;
2) 印章=$2;路径=$1;;
*)echo“用法:`basename$0.sh`[$PATH[remove:list]]”>&2
出口1;;
以撒
#当心作业中的引号!
回显“$path”|
${AWK:-AWK}-F:'#
开始{#选择要忽略的路径组件
chop=“”“$chop””;
如果(剁!=“”)nr=split(剁,去掉);否则nr=0;
对于(i=1;i我使用以下公式:

df -m | awk '{p+=$3}; END {print p}'

跨文件系统合计系统上使用的所有磁盘空间。

您可以找到几个不错的单行程序。

许多年前,我用awk编写了一个尾部脚本:

#!/usr/bin/awk -f
BEGIN {
  lines=10
}

{
  high = NR % lines + 1
  a[high] = $0
}

END {
  for (i = 0; i < lines; i++) {
    n = (i + high) % lines + 1
    if (n in a) {
      print a[n]
    }
  }
}
!/usr/bin/awk-f
开始{
行=10
}
{
高=行数百分比+1
a[高]=0美元
}
结束{
对于(i=0;i

我知道这很傻,但awk就是这么对你的。玩它很有趣。

计算httpd使用的内存

ps -ylC httpd | awk '/[0-9]/ {SUM += $8} END {print SUM/1024}'

或者通过替换httpd来执行任何其他进程。除以1024以获得MB的输出。

我成功地为UNIX构建了一个DOS树命令模拟器(find+awk):

find.-type d-print 2>/dev/null | awk'{for(i=1;i
打印两种图案之间的线条:

awk '/END/{flag=0}flag;/START/{flag=1}' inputFile

详细说明:

两个最喜欢的,基本上彼此无关。阅读为两个不同的、不相关的建议

轻松识别列号 :

对于那些经常使用awk的人,就像我在工作中进行日志分析一样,我经常发现自己需要找出文件的列号。因此,如果我在分析Apache access文件(可以找到一些示例),我会针对该文件运行下面的脚本:

NR == 1 {
        for (i = 1 ; i <= NF ; i++)
                {
                print i "\t" $i
                }
        }
NR > 1  {
        exit
        }
很容易分辨什么是什么。我通常在我的服务器上使用别名,并且在任何地方都有


按名称引用字段 现在,假设您的文件有一个标题行,您希望使用这些名称而不是字段号。这允许您这样做:

NR == 1 {
    for (i = 1 ; i <= NF ; i++)
        {
        field[$i] = i
        }
    }

主要的好处是使脚本更具可读性。

打印字段是大多数AWK教程中首先提到的内容之一

awk '{print $1,$3}' file
鲜为人知但同样有用的是排除字段,这也是可能的:

awk '{$1=$3=""}1' file

1.这可能应该成为社区维基。2.问题太多了。版主,请编辑这篇文章。感谢您发布的链接提供一个
对象/cm/cs/awkbook/在此服务器上不存在。
错误。请更新它们!@simlev:updated book url;现在不知道在哪里可以找到代码下载。
NR == 1 {
    for (i = 1 ; i <= NF ; i++)
        {
        field[$i] = i
        }
    }
NR > 1  {
    SUM += $field["val"]
    }
awk '{print $1,$3}' file
awk '{$1=$3=""}1' file