≡菜单

AWK入门教程–7 Awk打印示例

Linux Awk教程-简介和Awk示例

这是新的awk教程系列的第一篇文章。我们’在接下来的几周内,我们将在awk上发布几篇文章,这些文章将通过实际示例涵盖awk的所有功能。

在本文中,让我们回顾一下基本的awk工作方法以及7个实用的awk打印示例。

注意: 确保您查看我们的较早版本 Sed教程系列.

Awk简介和打印操作

Awk是一种编程语言,可轻松处理结构化数据并生成格式化的报告。 Awk代表其作者的名字“A W爱因伯格,以及 K恩尼汉”

Awk主要用于图案扫描和处理。它搜索一个或多个文件,以查看它们是否包含与指定模式匹配的行,然后执行关联的操作。

Awk的一些关键功能包括:

  • Awk将文本文件视为记录和字段。
  • 像普通的编程语言一样,Awk具有变量,条件和循环
  • Awk具有算术和字符串运算符。
  • AWK可以生成格式化的报告

Awk从文件或其标准输入中读取,然后输出到其标准输出。 Awk不会与非文本文件相处。

Syntax:

awk '/search pattern1/ {Actions}
     /search pattern2/ {Actions}' 科幻le

In the above awksyntax:

  • 搜索模式是一个正则表达式。
  • 动作–要执行的陈述。
  • Awk中可能有几种模式和动作。
  • 文件– Input 科幻le.
  • 程序周围的单引号是为了避免shell不解释其任何特殊字符。

Awk工作方法

  1. Awk一次一行读取输入文件。
  2. 对于每一行,如果匹配执行相应的操作,则它以给定的顺序与给定的模式匹配。
  3. 如果没有模式匹配,将不执行任何操作。
  4. 在以上语法中,搜索模式或操作是可选的,但不能同时选择两者。
  5. 如果未提供搜索模式,则Awk将对输入的每一行执行给定的操作。
  6. 如果未给出操作,则打印与给定模式匹配的所有行,这是默认操作。
  7. 空括号不执行任何操作。它不会执行默认的打印操作。
  8. 动作中的每个语句都应以分号分隔。

让我们创建具有以下内容的employee.txt文件,该文件将在
下面提到的例子。

$cat employee.txt
100  汤玛士  Manager    营业额       $5,000
200  Jason   Developer  技术  $5,500
300  Sanjay  Sysadmin   技术  $7,000
400  尼莎   Manager    Marketing   $9,500
500  Randy   DBA        技术  $6,000

Awk示例1. Awk的默认行为

默认情况下,Awk打印文件中的每一行。

$ awk'{print;}' employee.txt
100  汤玛士  Manager    营业额       $5,000
200  Jason   Developer  技术  $5,500
300  Sanjay  Sysadmin   技术  $7,000
400  尼莎   Manager    Marketing   $9,500
500  Randy   DBA        技术  $6,000

在上面的示例中,没有给出模式。因此,这些动作适用于所有行。
默认情况下,不带任何参数的操作打印会打印整行。所以它打印所有
文件的第几行失败。动作必须用大括号括起来。

Awk示例2.打印与图案匹配的线。

$ awk'/Thomas/
> /Nisha/' employee.txt
100  汤玛士  Manager    营业额       $5,000
400  尼莎   Manager    Marketing   $9,500

在上面的示例中,它打印了与‘Thomas’ or ‘Nisha’。它有两种模式。 Awk可以接受任意数量的模式,但是每个集合(模式及其相应的动作)必须用换行符分隔。

Awk示例3.仅打印特定字段。

Awk具有许多内置变量。对于每条记录(即一行),默认情况下,它将以空格字符分隔的记录分割并存储在$ n变量中。如果该行有4个单词,它将存储在$ 1,$ 2,$ 3和$ 4中。 $ 0代表整行。 NF是一个内置变量,代表记录中字段的总数。

$ awk'{print $2,$5;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000

$ awk'{print $2,$NF;}' employee.txt
Thomas $5,000
Jason $5,500
Sanjay $7,000
Nisha $9,500
Randy $6,000

在上面的示例中,$ 2和$ 5分别代表Name和Salary。我们也可以使用$ NF获得薪水,其中$ NF代表最后一个字段。在印刷声明中‘,’ is a concatenator.

Awk示例4.初始化和最终操作

Awk有两个重要的模式,它们由关键字BEGIN和END指定。

Syntax: 

BEGIN { Actions}
{ACTION} # Action for everyline in a 科幻le
END { 动作}

# is for 评论 in Awk

在开始从输入中读取行之前,将执行BEGIN部分中指定的操作。
在完成读取和处理来自输入的行之后,将执行END操作。

$ awk'BEGIN {print "名称\tDesignation\tDepartment\tSalary";}
> {print $2,"\t",$3,"\t",$4,"\t",$NF;}
> END{print "Report Generated\n--------------";
> }' employee.txt
Name	Designation	Department	Salary
Thomas 	 Manager 	 营业额 	         $5,000
Jason 	 Developer 	 技术 	 $5,500
Sanjay 	 Sysadmin 	 技术 	 $7,000
Nisha 	 Manager 	 Marketing 	 $9,500
Randy 	 DBA 	 	 技术 	 $6,000
Report Generated
--------------

在上面的示例中,它打印了报告的标题和最后一个文件。

Awk示例5.查找员工ID大于200的员工

$ awk'$1 >200' employee.txt
300  Sanjay  Sysadmin   技术  $7,000
400  尼莎   Manager    Marketing   $9,500
500  Randy   DBA        技术  $6,000

在上面的示例中,第一个字段($ 1)是员工ID。因此,如果$ 1大于200,则只需执行默认打印操作即可打印整行。

Awk Example 6. Print the list of employees in 技术 department

现在部门名称可用作第四个字段,因此需要检查$ 4是否与字符串匹配“Technology”,如果是,请打印该行。

$ awk'$4 ~/Technology/' employee.txt
200  Jason   Developer  技术  $5,500
300  Sanjay  Sysadmin   技术  $7,000
500  Randy   DBA        技术  $6,000

运算符〜用于与正则表达式进行比较。如果与默认操作匹配,即将执行整行打印。

Awk 例子7. Print number of employees in 技术 department

下面的示例检查该部门是否为技术部门,如果是,则在操作中,仅增加count变量,该变量在BEGIN部分中用零初始化。

$ awk'BEGIN { count=0;}
$4 ~ /Technology/ { count++; }
END { print "Number of employees in 技术 Dept =",count;}' employee.txt
Number of employees in Tehcnology Dept = 3

Then at the end of the process, just print the 值 of count which gives you the number of employees in 技术 department.

推荐读物

Sed和Awk 101骇客,作者:Ramesh Natarajan。我每天在UNIX / Linux环境上花费数小时来处理文本文件(数据,配置和日志文件)。我所有的文本处理工作都使用Sed和Awk。根据我在Sed和Awk的经验,’编写了Sed和Awk 101 Hacks电子书,其中包含有关Sed和Awk各种高级功能的101个实用示例,这些示例将延长UNIX / Linux的寿命。即使您已经使用Sed和Awk已有数年并且没有读过这本书,也请您帮个忙并阅读这本书。 Sed和Awk实用程序的功能会让您惊讶。

其他awk文章

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个Linux Sysadmin教程
  2. 50个最常用的Linux命令(包括示例)
  3. 排名前25位的最佳Linux性能监视和调试工具
  4. 妈妈,我找到了! – 15个实用的Linux Find命令示例
  5. Linux 101 Hacks第二版电子书 Linux 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 127 评论… 加一 }

  • 史蒂夫·米尔斯 2010年1月6日,上午3:38

    我才刚刚开始阅读这些文章。到目前为止,我认为它们写得很好,并且清楚地进行了解释,并意识到它们可能会被误解,因此在可能发生的地方提供了更多的细节。例如,当读者可能期望等号时,指出波浪号(〜)用于与正则表达式进行比较–在没有解释的情况下,读者可能会认为代字号代表与等号相同的事物。

    我将阅读更多。

    感谢您发布这些文章。

    亲切的问候
    史蒂夫

  • 丹尼尔·赖曼 2010年1月6日,上午6:02

    感谢您在awk上的发布。我经常使用它,但是最好进行一些更新和提醒。新年快乐。

  • 劳伦斯 2010年1月7日,上午4:34

    awkis awesome! 谢谢 for your sharing.

    最好的祝福,
    劳伦斯

  • 努斯珀 2010年1月9日,下午5:15

    你好… Good article –现在我知道什么是方舟了,我可以用它做什么– well written…。我现在在推特上关注你!

  • 苛刻 2010年1月10日,晚上10:08

    感谢 posting a tutorial 上 awkwith illustrated examples.
    I Will be expecting other articles 上 awk🙂

  • 拉梅什·纳塔拉詹(Ramesh Natarajan) 2010年1月14日,晚上9:23

    @Steve,

    是的如果没有正确解释,在这种情况下〜可能会引起混淆。感谢您的评论。

    @丹尼尔

    是的博客的大多数其他读者和您一样处于相似的位置。因此,我们在这里给出他们已经知道的功能的不断更新和剩余。

    @劳伦斯,苛刻,

    感谢您的非常好的评论。一世’很高兴您喜欢这篇文章。

    @Knusper,

    感谢 在推特上关注我们.

  • 塔拉凡 2010年3月21日,上午10:24

    南德拉·乌拉度(Nandraka Ulladhu)

    我猜想示例2可以不用下面这样的新行来完成?作为正则表达式的模式。

    ~/bin$ awk‘/Jason|Randy/’ employee
    200 Jason Developer 技术 $5,500
    500 Randy DBA 技术 $6,000

    还有什么;代表?模式结束?

  • 安德烈亚·阿玛拉(Andreia Amaral) 2010年4月7日,上午5:14

    你好

    我想使用这样的if 其他语句:
    如果$ 10>10 打印$ 0 > 科幻lename1
    否则打印$ 0> 科幻lename2

    但它’s不起作用,它没有创建filename1或filename2,该怎么办?
    谢谢?

  • 阿舒·阿格劳瓦尔(Ashu Agrawal) 2010年8月6日,上午10:31

    Grt post.Thanks for making me understand the awkworking

  • 阿维纳什 2010年10月1日,上午7:30

    嗨,这是阿维纳什….
    假设您有一个像这样的emp表:
    id 名称 designation salary
    1个avi manager 1000
    2灰管理器1500
    3 Nash管理器2000
    4名varma实习生500
    5周见习生600
    6名健康实习生800

    using awkcommand, i hav 至 print manager 至tal salary and trainee 至tal salary….
    我需要一个程序…..任何人都可以张贴吗

  • 维卡斯 2010年10月13日,上午1:34

    你好…[email protected]…..
    u 能够 try this 上e…….
    awk‘开始{man_sal = 0; trainee_sal = 0;}
    $ 3〜/ manager / {man_sal + = $ NF}
    / trainee / {trainee_sal + = $ NF}
    结束 {打印“经理总工资’s and trainee’s are=”man_sal,trainee_sal}’ in_file.name

  • 西瓦 2010年10月15日,上午1:44

    您好论坛成员,

    感谢AWK教程,这对我非常有帮助。

  • 阿维纳什 2010年10月19日,上午5:12

    @维卡斯
    谢谢

  • 希望 2010年10月21日,上午3:36

    大家好,
    如果我有一个问题文件,如:

    101添加打开Vish Iuo

    如果退出并再次登录,我应该得到第一个字段的增量,例如

    第102章

  • Mounika 2010年10月27日,晚上10:40

    简直太棒了

    它对初学者非常有用,对考试时间也有帮助

    所以大家阅读并享受wd unix

  • 张琳达 2010年11月17日,下午12:36

    这是非常有帮助的。如果我要打印以逗号分隔的薪水,例如2,000代替2000

  • 艾肯 2010年12月30日,晚上8:22

    您’我做了一点错字:

    >_技术_部门的员工人数= 3

  • 苏达 2011年2月2日,下午12:38

    每个人都有不同的治疗方法

  • 埃本 2011年3月27日,下午11:28

    对于像我这样的初学者来说非常有用…………

  • 卡兰达 2011年4月7日,上午8:58

    你好
    我发现这篇文章非常有用。任何想知道awk是什么的人,都会给出一个很不错的主意。期待有关unix其他主题的类似文章。

    谢谢 -

  • 巴吉亚杰 2011年4月24日,上午1:38

    你好

    好,
    请尝试在YouTube中教书以尝试其他方法。
    将会更加成功。

    保持,
    我需要在awk上考试,让我看看我能成功多少。

  • 内核孩子 2011年6月10日,上午6:48

    非常简单易懂,非常感谢,对我有很大帮助

  • 丽菊 2011年6月14日,上午3:05

    简单的好文章-

  • 马里哈 2011年6月30日,上午9:03

    到目前为止,我读过一些极客文章,提供的解释是迄今为止我见过的最好的解释!做得好-非常感谢-

  • 穆斯林 2011年7月19日,下午12:02

    你好

    我有一个问题,如何使用打印命令“awk”仅将这些数据从许多列排序或转置为2列
    #输入文件
    名称1月2月3月4月5月6月7日
    ——- —– —— ———- ——– —— ——- ——
    BEN 5,000 6,000 7,000 8,000 6,500 7,500 9,000
    ONG 4,000 5,500 6,000 5,800 7,000 8,000 8,5000

    #输出应如下所示。
    5,000本
    本6,000
    7,000本
    本8,000
    6,500本
    7,500本
    本9,000
    ONG 4,000
    500 5,500
    6,000
    勇5,800
    7,000
    8,000ONG
    5000 8,5000
    Anyone 能够 help.thanks
    @muss

  • 指甲贴 2011年8月9日,下午1:08

    我知道’s late, but …

    #!/ bin / bash

    awk‘ {
    #跳过前两行
    如果(NR == 1 || NR == 2)
    继续

    for(i = 2;我<=NF; i++)
    printf("%s %s\n", $1, $i)
    } ' datafile.txt

    好啊 site! I learned some new things about sedI didn't know.

  • 苏丹舒 2011年8月29日,上午1:00

    这篇文章真棒!!!

  • 卡林 2012年1月25日,上午9:03

    对于初学者非常有用的信息。谢谢

  • 伦·理查兹(Len Richards) 2012年2月15日,下午3:46

    我们的图书馆数据库中有重复的标题。我可以找到重复项,但可以’t找出如何打印与正则表达式匹配的行,并且该行也具有相同的表达式。每组重复项之间有一个空格:例子。我会在SERSOL-EBK上进行匹配

    2012乔吃了我的狗| SERSOL-EBK | 122456
    2012乔吃了我的狗| SERSOL-EBK | 122459

    2011年Joe吃了我的烤面包机| SERSOL-EBK | 122433
    2011年Joe吃了我的烤面包机| SERSOL-EBK | 125567

  • 内哈 2012年3月1日,上午12:37

    嗨..
    我想通过awk捕获这些数据。

    596583.46875(E)4924298.34375(N)
    地质@PERMANENT(9)沙子中的PERMANENT

    604960.78125(E)4922837.53125(N)
    地质@PERMANENT中的PERMANENT(6)页岩

    596911.40625(E)4920512.15625(N)
    地质@永久(4)砂岩中的永久

    输出应为:
    插入mytable值(596583.46875,4924298.34375,geology @ PERMANENT,页岩);
    插入mytable值中(604960.78125,4922837.53125,geology @ PERMANENT,shale);

    任何帮助将不胜感激。

    抱歉,我需要将页岩放在单个代码中,以便可以将其插入到table.insert到mytable值中(596583.46875,4924298.34375,geology @ PERMANENT,’shale’);

    感谢你

  • subhojit777 2012年6月30日,上午12:55

    很棒的文章。谢谢 -

  • 咪咪 2012年7月6日,下午2:20

    谢谢你这个网站–你真的节省了我很多时间。这很容易理解,确实帮助我理解了awk。

  • 苏达山 2012年7月17日,上午7:38

    大家好,

    我有一个日志文件,其内容如下。

    09:30:51 [00082] TI​​MER iatesystems.hub.logging.TimerLog:MPI_MxmRunMatch:09:30:52 [00082] TI​​MER iatesystems.hub.logging.TimerLog:MPI_MxmRunMatch:
    09:30:53 [00082]计时器iatesystems.hub.logging.TimerLog:MPI_MxmRunMatch:

    该实体将具有基于上述时间戳记的实体(即09:30:51、09:30:52等)。

    现在我的要求是,我需要每小时获取条目数。
    例如,如果第一条记录的时间戳为09:30:51。
    直到10:30:51时间戳’s记录我需要获取记录数。

    你能帮我得到这个吗?

    谢谢,
    苏达山

  • 史蒂文 2012年8月13日,上午8:54

    内哈试试这个
    假设您的数据文件名= log.txt
    将insert语句放入insert.sql中
    ————————————————————-
    awk‘BEGIN {str=”插入mytable值(“;}
    {如果((NR%3)== 1)
    { #打印“NR1 is:” NR;

    instr = str””substr($1,1,12)”,”substr($2,1,13);
    #打印“str1 is:” instr;
    }
    否则((NR%3)== 2)
    {#打印“NR2 is:”NR;
    instr = instr”,”$1″,””‘”‘”‘””ashale””‘”‘”‘””)”;
    打印说明>”insert.sql”;
    }
    否则((NR%3)== 0)
    {#列印“NR3 is:”NR;
    str =”插入mytable值(“;
    }
    科幻}
    结束{}’ log.txt

  • 普拉布 2012年9月11日,上午5:29

    逗号分隔文件,格式如下

    名称,地址,开始日期,结束日期

    但是对于很少的记录,“地址”字段中有多余的逗号

    Mark,110A,Stuart Mark,01/01 / 2012,06 / 07/2012

    请帮我删除多余的逗号,在10000条记录中有100万条记录存在此问题

  • 指甲 2012年9月11日,下午1:36

    普拉布:
    如果字段数大于4,则假定存在使字段2变为字段2和字段3的逗号。然后,将字段2合并为字段2和字段3:

    awk‘ BEGIN { FS=OFS=”,” }
    {
    如果(NF> 4)
    $ 2 =”$2 $3″
    打印$ 0
    } ‘ datafile.txt

  • 普拉布 2012年9月18日,上午3:38

    感谢Nalis,感谢您的帮助

  • 基兰·英德拉(Kiran Indrala) 2012年11月7日,上午11:33

    对于初学者来说确实非常有帮助。我非常感谢您分享此信息。

    谢谢,
    基兰·英德拉(Kiran Indrala)

  • 瓦华 2012年12月5日,上午4:46

    你好,
    我有以下输出:
    [服务器,模块,版本,时间戳记]
    Serversv10; admin; 1.0.2; 2012.12.03-14:07:39
    Serversv10; admin; 0.1.2; 2012.12.03-14:07:39
    Serversv10; admin; 0.0.1; 2012.12.04-09:29:45
    Serversv10; admin; 0.0.12; 2012.12.03-10:23:31
    Serversv10; admin; 0.0.2; 2012.12.03-14:07:39
    Serversv10; admin; 1.0.1; 2012.12.04-09:29:45
    Serversv10; admin; 0.0.8; 2012.12.04-09:34:39
    Serversv10;项目; 0.0.1; 2012.12.03-14:08:37
    Serversv11; admin; 0.0.6; 2012.12.03-10:23:31
    Serversv10;项目; 0.0.1; 2012.12.04-08:22:09
    Serversv11; admin; 0.0.6; 2012.12.03-13:58:58
    Serversv11; admin; 0.0.6; 2012.12.03-11:39:15
    Serversv11; admin; 0.0.7; 2012.12.03-14:07:39
    Serversv11;基础; 0.0.1; 2012.12.03-11:39:59
    Serversv11;项目; 0.0.1; 2012.12.03-12:08:48
    Serversv11;项目; 0.0.1; 2012.12.03-14:08:37
    Serversv12; admin; 0.0.6; 2012.12.03-10:23:31
    Serversv12; admin; 0.0.6; 2012.12.03-11:47:35
    Serversv11;项目; 0.0.1; 2012.12.03-12:08:31
    Serversv12; admin; 0.0.7; 2012.12.03-14:07:39
    Serversv12;基础; 0.0.1; 2012.12.03-12:06:45
    Serversv12; config; 0.0.1; 2012.12.03-12:04:57
    Serversv12; admin; 0.0.6; 2012.12.03-13:58:58

    并希望将其排序如下
    [服务器,模块,版本,时间戳记]
    Serversv10; admin; 1.0.2; 2012.12.03-14:07:39
    Serversv10; admin; 0.1.2; 2012.12.03-14:07:39
    Serversv10; admin; 0.0.12; 2012.12.03-10:23:31
    Serversv10; admin; 0.0.8; 2012.12.04-09:34:39
    Serversv10; admin; 0.0.2; 2012.12.03-14:07:39
    Serversv10;项目; 1.0.1; 2012.12.03-14:08:37
    Serversv10;项目; 0.0.1; 2012.12.03-14:08:37
    其余的顺序相同
    你能帮忙吗?

  • 指甲 2012年12月5日,上午11:28

    R.S.

    抱歉,我的输出没有一致的排序顺序。请明确说明您想要什么。

    无论如何,Unix / Linux的sort命令可能会做您想要的。假设字段分隔符为分号,则此命令按第一个字段排序,然后按第二个字段排序,然后按第四个字段排序(时间戳)

    排序-t“;”-k 1,1 -k 2,2 -k 4,4 科幻le.txt

  • 阿米特 2012年12月6日,上午6:23

    我有以下格式的文件

    2012-04-30 00:00:05,266 1335692570491,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 12486685 / 2012-04-30 00:00:05.196
    2012-04-30 00:00:05,313 1335692570492,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 12486685 / 2012-04-30 00:00:05.260
    2012-04-30 00:00:12,740 1335692570493,收到客户端请求::交易/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 83022172 / 2012-04-30 00:00:12.687
    2012-04-30 00:00:12,868 1335692570494,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 83022172 / 2012-04-30 00:00:12.822
    2012-04-30 23:59:15,450 1335692590664,从客户端收到请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 1437954504 / 2012-04-30 23:59:15.404
    2012-04-30 23:59:15,645 1335692590665,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 200178220 / 2012-04-30 23:59:15.600
    2012-04-30 23:59:17,177 1335692590666,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 1437954504 / 2012-04-30 23:59:17.128
    2012-04-30 23:59:18,574 1335692590667,从客户端收到请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 200178220 / 2012-04-30 23:59:18.513
    2012-04-30 23:59:21,322 1335692590668,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 200178220 / 2012-04-30 23:59:21.274
    2012-04-30 23:59:34,467 1335692590669,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 228289416 / 2012-04-30 23:59:34.410
    2012-04-30 23:59:34,493 1335692590670,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 228289416 / 2012-04-30 23:59:34.434
    2012-04-30 23:59:40,094 1335692590671,从客户端收到请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 1195793760 / 2012-04-30 23:59:40.054
    2012-04-30 23:59:40,168 1335692590672,从客户端收到请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 1195793760 / 2012-04-30 23:59:40.127
    2012-04-30 23:59:40,560 1335692590673,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CHECK_REQ / 1195793760 / 2012-04-30 23:59:40.523
    2012-04-30 23:59:41,289 1335692590674,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 1195793760 / 2012-04-30 23:59:41.011
    2012-04-30 23:59:46,895 1335692590675,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 1174256481 / 2012-04-30 23:59:46.827
    2012-04-30 23:59:46,914 1335692590676,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 1174256481 / 2012-04-30 23:59:46.841
    2012-04-30 23:59:56,228 1335692590677,收到来自客户端的请求::交易/ PRS_ID /时间戳:: 阿米特_CARD_LIST_REQ / 298656228 / 2012-04-30 23:59:56.167
    2012-04-30 23:59:58,399 1335692590678,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_LIST_REQ / 1181525888 / 2012-04-30 23:59:58.318
    2012-04-30 23:59:58,499 1335692590679,收到来自客户端的请求::交易/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 298656228 / 2012-04-30 23:59:58.436
    2012-04-30 23:59:58,661 1335692590681,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 298656228 / 2012-04-30 23:59:58.605
    2012-04-30 23:59:58,663 1335692590680,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 298656228 / 2012-04-30 23:59:58.600
    2012-04-30 23:59:58,706 1335692590682,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 298656228 / 2012-04-30 23:59:58.644
    2012-04-30 23:59:58,971 1335692590683,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CHECK_REQ / 298656228 / 2012-04-30 23:59:58.902
    2012-04-30 23:59:59,058 1335692590684,从客户端收到的请求::事务/ PRS_ID /时间戳:: 阿米特_CARD_LIST_REQ / 1220865349 / 2012-04-30 23:59:59.010
    2012-04-30 23:59:59,794 1335692590685,收到来自客户端的请求::交易/ PRS_ID /时间戳:: 阿米特_CARD_DATA_REQ / 1220865349 / 2012-04-30 23:59:59.741

    现在我想要以下格式的输出

    2012-04-30 | 2012-04-30 23:59:59 | 1335692590685 | 阿米特_CARD_DATA_REQ | 1220865349

    第一个字段是从提交的时间戳记中提取的2012-04-30 23:59:59


    在上面的相邻行将显示为单行…在网站上复制时,它分为两行

    请帮我

    谢谢,
    阿米特

  • 巴德里 2012年12月9日,上午2:31

    好啊 and simple article.
    示例5表示打印,尖括号和;是可选的..对吗?

  • 小金 2013年1月7日,下午12:52

    最佳AWK简介I’我碰到过。谢谢!!

    >K<

  • 普里亚 2013年2月17日,上午10:30

    i want awkprogram 至 display employee details

  • 琳达 2013年3月18日,晚上9:37

    大家好,

    我有一个关于如何读取文件中的n +行并替换模板文件中的数据的问题。下面是示例

    **名称**

    安妮 80

    ** Template.txt **

    $ NAME’s mark is $MARK.

    我设法读取数据,替换为模板,并按如下所示添加到RESULT。

    NAME =`awk‘{print$1}’ NAME` ; MARK=`awk ‘{print$2}’ NAME`

    sed-e“s|NAME|$NAME|” -e “s|MARK|$MARK|” Template.txt >> RESULT

    结果将是

    安妮’s mark is 80.

    但是,当数据的行很少时,我不知道如何读取第二行和其余的行。我有300行数据。

    **名称**

    安妮 80

    肖恩30

    尼娜50

    自从我在脚本编写中成为新手以来,谁能帮助我。

    提前致谢 -

  • esh谷 2013年4月18日,晚上11:26

    大家好,

    我有个疑问
    我想在正则表达式字段的匹配中使用变量
    即我正在从用户那里读取一个字符串,我想用awk将其与整个文件进行匹配

    读var;
    cat int_out.txt | awk/var instead of reg exp/ { print $1};

    有人可以帮我吗

    谢谢

  • 指甲卡莫迪 2013年4月19日,上午11:30

    有多种方法可以将shell变量嵌入到awk脚本中。此链接描述了它们:

    http://tek-tips.com/faqs.cfm?fid=1281

    如果需要更多帮助,请发布一个更具描述性的示例。谢谢。

    钉子

  • 阿伦·k 2013年5月20日,下午4:16

    解释的方式真的很好…. 谢谢 a lot

  • 西西拉 2013年5月21日,上午12:03

    谢谢!

  • 苏弥 2013年6月7日,晚上11:12

    值得阅读和理解,非常感谢

  • 曼图 2013年7月17日,上午5:55

    我想在字符之间添加零。我该怎么办?

  • 阿拉文 2013年7月22日,上午6:51

    如何使用awk命令读取(`)分隔的文件?我可以逐行读取(`)分隔文件中的每一列吗?

  • 指甲卡莫迪 2013年7月23日,下午1:49

    阿拉文:

    您的数据文件是否看起来像这样(以反斜线分隔):

    一二三
    四五六

    awk有一个内部的Field Seperator变量,该变量允许更改字段定界符:

    #!/ bin / bash

    awk‘ BEGIN { FS=”`” }
    {
    打印$ 2#打印第二个字段
    } ‘ datafile.txt

  • 安舒尔 2013年7月24日,上午8:52

    你好

    以下是我的日志文件中的两行:
    2013-05-14 12:40:06,524(http-172.24.90.20-5555-17)[LoginLogger.java:55:INFO] [登录ID:superadmin] [用户ID:SU001] [网络ID:NG] [用户名称:superadmin] [用户类型:操作员] [类别代码:SUADM] [日志类型:LOGIN] [登录时间:14/05/13 12:40:06] [注销时间:] [IP地址:172.16.100.11] [浏览器类型:Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 6.1; Trident / 5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath .2; .NET4.0C)] [其他信息:成功登录]

    2013-05-14 13:04:43,797(ContainerBackgroundProcessor [StandardEngine [Catalina]])[LoginLogger.java:55:INFO] [登录ID:netadm] [用户ID:PT130306.1715.012115] [网络ID:NG] [用户名称:Network Admin] [用户类型:OPERATOR] [类别代码:NWADM] [日志类型:LOGOUT] [登录时间:14/05/13 11:26:03] [注销时间:14/05/13 13:04 :43] [IP地址:172.24.180.35] [浏览器类型:Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 6.1; Trident / 4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)] [其他信息:成功注销]

    我的日志文件中的所有行都不相同,现在我的要求是每行只需要5个字段,并且它们不在所有行中的同一位置。

    我想要csv文件登录ID,用户名,日志类型,登录时间,IP地址中的以下字段。

    谢谢你的帮助。

  • 指甲卡莫迪 2013年7月25日,上午12:30

    安舒尔:

    由于字段不是按顺序排列的,因此我使用for循环查看每个字段并匹配您感兴趣的5个字段,然后为处理的每一行打印出5个变量中的每一个:

    awk‘ BEGIN { FS=”[” ; myarr [1] = 0}
    {
    loginid =””
    用户名=””
    logtype =””
    登录时间=””
    ipaddress =””
    对于(i = 1; i<=NF; i++)
    {
    如果($ i〜/登录ID /)
    {
    子("Login ID:","",$ i)#删除字段标识符
    子("]","",$ i)#删除]
    子(/[ \t]+$/, "",$ i)#删除尾随空格
    loginid = $ i
    }

    if($ i〜/用户名/)
    {
    子("User 名称:","",$ i)#删除字段标识符
    子("]","",$ i)#删除]
    子(/[ \t]+$/, "",$ i)#删除尾随空格
    用户名= $ i
    }

    if($ i〜/日志类型/)
    {
    子("Log Type:","",$ i)#删除字段标识符
    子("]","",$ i)#删除]
    子(/[ \t]+$/, "",$ i)#删除尾随空格
    logtype = $ i
    }

    if($ i〜/登录时间/)
    {
    子("Login Time:","",$i)
    子("]","",$ i)#删除]
    子(/[ \t]+$/, "",$ i)#删除尾随空格
    logintime = $ i
    }

    if($ i〜/ IP地址/)
    {
    子("IP Address:","",$ i)#删除字段标识符
    子("]","",$ i)#删除]
    子(/[ \t]+$/, "",$ i)#删除尾随空格
    ipaddress = $ i
    }
    }

    printf("%s,%s,%s,%s,%s\n",loginid,用户名,日志类型,登录时间,ipaddress)

    } ' logfile.txt

  • 安舒尔 2013年7月25日,上午3:33

    指甲:

    非常感谢您提供了出色的脚本,该脚本一劳永逸。非常感谢您的帮助。

  • 指甲卡莫迪 2013年7月25日,下午4:23

    安舒尔:

    谢谢你的客气话。非常感激!

    顺便说一句,让我指出我错误地在脚本中留下了一个未使用的数组声明:

    myarr [1] = 0

    That 能够 be deleted.

  • 玛丽亚 2013年8月12日,晚上11:28

    我有一个日志文件,想计算第一列相同值的数量,
    例如,对于-8.7,计数= 4,对于-7.8,计数= 4…我能够手动grep -v;但是,我希望输出为

    碳纳米管 值 …

    4 -8.7
    4 -7.8
    1 -6.9
    1 -2.5
    2 -1.4

    =========

    输入文件

    -8.7检查
    -8.7检查
    -8.7检查
    -8.7检查
    -7.8检查
    -7.8检查
    -7.8检查
    -7.8检查
    -6.9检查
    -2.5检查
    -1.4检查
    -1.4检查

  • 玛丽亚 2013年8月12日,晚上11:53

    我想从两行表

    本$ 5,000
    本$ 6,000
    本$ 7,000
    本$ 8,000
    本$ 6,500
    本$ 7,500
    本$ 9,000
    ONG $ 4,000
    YONG $ 5,500
    ONG $ 6,000
    YONG $ 5,800
    YONG $ 7,000
    YONG $ 8,000
    ONG $ 8,5000

    BEN 5,000 6,000 7,000 8,000 6,500 7,500 9,000
    ONG 4,000 5,500 6,000 5,800 7,000 8,000 8,5000

    谢谢 as I am learning awknow

  • 玛丽亚 2013年8月13日,上午1:37

    我有计数脚本

    开始{打印“cnt “,”value” }
    {
    Slack [$ 1] ++;
    }
    结束 {
    为(Slack中的var){
    打印Slack [var],” “, var
    }
    }

    和输出文件看起来像

    碳纳米管 值
    1
    2 1.0
    3 7.8
    4 6.9
    1 1.1
    4 0.2
    2 0.4
    4 6.0
    2 -0.0
    1 -6.9
    4 -7.8
    4 -8.7
    2 7.3
    4 6.4
    2 -0.5
    2 -1.4
    10 -0.7
    1 -2.5
    ==========

    我的问题:
    1)为什么我有第一行“1”没有价值?如何将其删除?
    2)如何使用已排序的列(例如,第一列,第二列)进行打印

    谢谢

  • 指甲 2013年8月16日,下午3:13

    首先,您可能正在打印第一行“1”因为您在数据文件中有一行空格(空格字符,制表符或换行符)。通过在awk脚本的第一行中包含以下内容来摆脱它:

    if(/ ^ [/ t] * $ /)
    下一页

    其次,较新版本的GNU awk(例如gawk)具有称为asort的内部排序例程。在GNU awk用户处签出’s Guide:

    http://www.gnu.org/software/gawk/manual/gawk.html

  • Oche J Ejembi 2013年8月30日,下午1:17

    谢谢你万维网上的BEST AWK教程。

    在我阅读本教程和阅读其他教程之后,对我来说,这似乎是一种汇编语言,但是您的语言已经用简单的语言进行了解释,并附有简单的示例。谢谢!

  • Deiveegaraja Andaver 2013年9月19日,上午4:43

    感谢提供这篇好文章..
    在这里,我将告诉朋友们,我知道AWK实用程序。.再次感谢您的精彩文章。

  • 拉吉 2013年10月2日,上午8:27

    这对我们的任务非常有用,谢谢…………:-)

  • 阿克尔 2013年10月10日,上午4:36

    谢谢你对我很有帮助

  • 苏杰 2013年10月26日,下午12:54

    大家好,
    我在脚本中进行了一些字符串操作,想尝试使用awk。但是,我一直坚持使用字符串比较。我的难题的简化形式如下:

    这有效:
    $回声‘”status”:”Completed”‘ | awk‘BEGIN{FS=”:”} /”status”/ {print $2}’
    “Completed” <–打印正确的单词

    这不't:
    $回声'"status":"Completed"' | awk'BEGIN{FS=":"} /"status"/ {print ($2 == "Completed") ? "Yes" : "No"}'
    No <– Shouldn't this 输出 be 是 given $2 is "Completed"?

    在上面的第二个中,我'd期望将输出视为"Yes"(因为第二个元素是"Completed"), 但它'一直在打印"No".

    我究竟做错了什么?

    顺便说一句,如果字符串比较成功,我真正需要做的是设置一个变量。印刷测试只是看它是否'的工作,似乎我需要重新考虑。

    非常感谢您的帮助。

  • 拉维 2013年11月20日,下午3:49

    这是我的剧本

    #!/ bin / bash
    KEEP = 30#天
    源= / apps / tibco / 做main / xxxxxxxx / xxxxxxxxx
    DST = / apps / tibco / 做main / xxxxxxxxxxxxxxxxxxxxxxxxxxx / xxxxxxx

    在`find $ SOURCE -type f -mtime + $ KEEP |中查找| sed‘s#.*/##”; 做
    DDATE = stat–format=”%y” “$SOURCE/$item” | awk‘{print $1}’
    如果[-z“$DDATE” ]; 然后
    继续
    科幻

    #根据需要创建目录
    如果[-d“$DST/$DDATE” ]; 然后
    麦克迪尔“$DST/$DDATE”
    科幻

    mv “$SOURCE/$item” “$DST/$DDATE/$item”
    gzip“$DST/$DDATE/$item”
    完成
    =========================================
    失误
    ./archive.sh:第9行:意外令牌`|附近的语法错误’
    ./archive.sh:第9行:DDATE = stat–format=”%y” “$SOURCE/$item” | awk‘{print $1}’`’

    该行的末尾只有一个`。

  • 指甲 2013年11月21日,下午5:21

    我看到您的脚本有几个问题:

    首先,我看到您的命令替换是’不正确我选择使用命令替换的bash方法:$(….) instead of `…..`

    在$(找到$(查找$ SOURCE -type f -mtime + $ KEEP | sed|‘s#.*/##’)

    其次,我想您要在sed命令周围加上引号。

    另外,您确定stat命令的语法正确吗?我认为format关键字与-c选项一起使用。

  • 希尔帕 2013年12月31日,上午6:36

    Write an AWK command 至 list all the 科幻les except the 上e which is having 名称 as “sample”

    Write an AWK command 至 concatenate owner and group 名称 of all the 科幻les in a directory.

  • 菲利普·华纳 2014年1月3日,上午5:20

    尝试这些程序,然后键入nawk -f circle或gawk -f circle)。
    创建文件圈:
    BEGIN { # circle w-f circle
    做{loopCount ++
    系统(“nawk -f s.circle” )
    printf(“Another 上e? “)
    热线电话
    如果($ 1〜/ [Yy] /){继续}
    出口
    } while(loopCount)
    }
    结束 {#显示循环计数
    printf(“绕圈%d次。\ n”, loopCount)
    }
    创建文件s.circle:
    开始{#s.circle
    做 { printf(“Type the radius ? “)
    热线电话
    r = $ 1 + 0
    如果> 0 ) { 出口 }
    printf(“半径必须为正\ n”)
    }而(1)
    }
    #
    #主要
    #
    结束 { #
    头= 710/113
    周长= c = tau * r
    printf(“圆周为%f,面积为%f \ n”, c, c * r / 2 )
    }

  • 阿什什乔希 2014年1月7日,上午2:40

    你好

    好学。

  • 阿什什乔希 2014年1月7日,上午2:45

    您能否也为sed提供相同的知识?

  • kk梅农 2014年1月8日,晚上10:09

    我需要将上一行的第1 4个字符连接到接下来的几行。
    我应该如何实现?

    谢谢

  • 菲利普·华纳 2014年1月10日,上午4:03

    项目66,右圆括号放在错误的位置,应该是:
    w‘/ status / {print($ 2 ==“Completed” ? “Yes” : “No” ) }’
    这有效(产生“Yes”).

  • cgs 2014年1月17日,上午10:47

    我如何转换以下

    米拉23 43 56 abcd
    米拉32 55 abcd xyz

    拉朱12 4a 5/7 4:4 abcd
    拉朱23 4r 3:4 ab
    ——————————————————–

    Mira 23 43 56 abcd 32 55 abcd xyz

    拉朱12 4a 5/7 4:4 abcd 23 4r 3:4 ab

    ————————————————————-

    awk和print $ 1可以捕获列,但是相同的行怎么办“name”在第一列中将与列中的所有值分组。

  • 指甲 2014年1月19日,上午2:06

    这样的事情怎么样?它’一个断点报告,该报告会擦除第一个字段,直到第一个字段更改为止:

    #!/ bin / bash

    awk‘ BEGIN { prevrec=”” ; fr=0 }
    {
    如果(NF == 0)
    下一条#跳过空白行

    如果(prevrec ==“” || prevrec != $1)
    {
    prevrec = $ 1
    如果(fr == 0)
    {
    打印“\n%s”, $0
    fr==0
    }
    其他
    {
    $ 1 =””#消灭第一个字段
    打印” %s”, $0
    fr=1
    }
    }
    其他
    {
    $ 1 =””
    打印“%s”, $0
    }

    } 结束 {printf“\n” } ‘ mytxt.txt

  • 尼基尔 2014年2月18日,上午3:46

    感谢您的帖子,它帮助我开始了。
    您能提供一些基本问题吗,我可以尝试一下。

    提前致谢,
    尼基尔

  • 凯莉安·查克拉瓦蒂 2014年2月25日,上午1:37

    感谢您的信息…通过阅读您的帖子,我在Unix中长大。…..Good work

  • 钦纳 2014年3月6日,上午1:29

    你好
    此输出:
    c1t50060E80166CED71d334s2
    c1t50060E80166CED71d335s2
    c1t50060E80166CED71d336s2

    我要这样我只想删除最后一个“s2” from every line.
    像这样:
    c1t50060E80166CED71d334
    c1t50060E80166CED71d335
    c1t50060E80166CED71d336

  • 指甲 2014年3月6日,下午3:00

    #使用sed:

    sed‘s/s2$//’ test.txt

    #这可以在使用nawk的Solaris 9机器上使用:
    awk‘ { 子(“s2$”, “”); print } ‘ test.txt

  • 钦纳 2014年3月7日,下午11:34

    非常感谢。工作正常

  • 西 2014年4月16日,上午5:15

    你好

    我有以下文件内容和ID数组:

    20140320 00:08:23.846信息[WebContainer:84]– anything in line
    20140320 00:08:23.846测试[翻译:55]–虚拟实验室和任何实验室
    20140320 00:08:23.846数据[任何内容:60]– anything in line
    20140320 00:08:23.847 anyting [任何内容:5]– anything in line
    20140320 00:08:23.846信息[WebContainer:84]– anything in line
    20140320 00:08:23.846测试[翻译:55]–虚拟实验室和任何实验室
    20140320 00:08:23.846数据[任何内容:60]– anything in line
    20140320 00:08:23.847 anyting [任何内容:5]– anything in line

    假设我有数组元素84和55,那么只有在方括号旁边的行:

    20140320 00:08:23.846信息[WebContainer:84]– anything in line
    20140320 00:08:23.846测试[翻译:55]–虚拟实验室和任何实验室
    20140320 00:08:23.846信息[WebContainer:84]– anything in line
    20140320 00:08:23.846测试[翻译:55]–虚拟实验室和任何实验室

    不确定数组中有多少个元素,但是基于所有元素,行应直接指向输出文件

    请帮我

  • 指甲 2014年4月16日,上午10:48

    一种方法是读取每一行并使用cut来保存方括号之间的所有内容。然后使用set命令执行解析。可以使用eval命令确定最后一个字段,最后执行比较:

    #!/ bin / bash

    边读边

    orgline =”$line”
    tt = $(echo $ line | cut -d'[‘ -f2 | cut -d’]’ -f1)
    组– $( 回声“$tt”)
    fvalue = $(评估回声“\$$#”)
    如果[[$ fvalue -eq 55 || $ fvalue = 84]]
    然后
    回声“$orgline”
    科幻

    完成< datafile.txt

  • 西 2014年4月17日,下午11:02

    谢谢钉子

    我想使用awk来实现,因为有超过10000行,这看起来很多次。

    这里的threadid也不固定,我只给出了两个条目,可能更多。

    请建议我

  • 指甲 2014年4月18日,上午10:36

    首先,根据编程的实现,不要’t expext awk更快。由于awk是外部命令,因此会产生一个额外的过程。

    我不’t understand:
    “线程ID的数量也不固定”

    请发布一个更好的数据示例。

    指甲

  • 西 2014年4月22日,晚上10:03

    感谢指甲,

    ThreadID来自其他文件,例如数组(55,84)中带有两个数组元素。所以这里没有threadid,我的意思是元素没有固定。

  • 克里希纳 2014年4月25日,上午1:00

    嗨,
    我有两个文件如下
    文件1
    machine1关机时间21:30:00
    machine2关机时间21:32:07
    文件2:
    machine1开始时间22:31:05
    machine2开始时间21:30:25

    现在,我需要一个程序,如果关机时间少于开始时间,则将输出打印为
    “machine1 / machine2正常运行”
    如果关机时间大于启动时间,则将输出打印为
    “machine1 / machine2重新启动不正确”

    感谢帮助 !

  • 塔努吉(Tanujib Patra) 2014年5月8日,晚上11:28

    您好,
    我有一个如下所示的INPUT文件,我想按照OUTPUT FILE下所述转换为以下输出文件。
    Can anybody help me in awkscripts.

    输入文件
    640 0.0 1480 1313.77 1500.09 1694.76 1536.66 1933.32 1583.61
    2419.99 1699.16 2780.7 1872.48 3156.68 2020.53 4295.82 2596.38
    5996.92 3417.41
    960 0.0 1480 1500 1496.46 1758.46 1538.27 2061.54 1568.46
    2381.54 1635.82 2741.54 1772.87 3283.08 2030.7 4295.82 2596.38
    5998.46 3403.47
    ………………………………………………………………………………………………………………
    …………………………………..
    输出文件:
    640 0.0 1480
    640 1313.77 1500.09
    640 1694.76 1536.66
    640 1933.32 1583.61
    640 2419.99 1699.16
    6402780.7 1872.48
    640 3156.68 2020.53
    640 4295.82 2596.38
    640 5996.92 3417.41
    960 0.0 1480
    960 1500 1496.46
    960 1758.46 1538.27
    960 2061.54 1568.46
    960 2381.54 1635.82
    960 2741.54 1772.87
    960 3283.08 2030.7
    960 4295.82 2596.38
    960 5998.46 3403.47
    ………………………………………
    ………………………..

    提前致谢
    最好的祝福
    塔努吉卜

  • 范艺 2014年6月13日,晚上11:25

    如何将第四列转换为第二列:
    100 汤玛士 Manager 营业额 $5,000
    200 Jason Developer 技术 $5,500
    300 Sanjay Sysadmin 技术 $7,000
    400 尼莎 Manager Marketing $9,500
    500 Randy DBA 技术 $6,000

  • 莱拉 2014年6月19日,下午1:33

    太好了谢谢,。

  • 苛刻 2014年6月21日,上午1:04

    阿米特,我知道有点晚了,但这是您正在寻找的命令:
    awk‘{print $1″ | “$19” “substr($20,1,8) ” | “substr($ 3,1,length($ 3)-1)” | ” $15″ |”$17}’ 科幻le1.txt

  • 更多 2014年8月1日,上午6:03

    嗨,朋友们,
    我3年前做了MCA(由于一些我没有做过的问题)
    能够 i get job in linux
    我现在学习linux
    如果有人指导我

  • 苏达山 2014年8月19日,上午2:16

    关于如何将| +作为分隔符一起解析的任何想法。我有一个如下所示的文件

    123 | + MN | +2014
    456 | + DE | +2015

    这是| +分隔的文件。但是无法通过awk将| +作为定界符处理…我想解析并打印第三列,即包含数据点2014和2015的列

    任何帮助将非常感激。

  • 史蒂芬 2014年11月10日,上午5:05

    很棒的文章,谢谢!

    最近使用AWK通过运行获取用户的创建日期:
    sudo passwd -S sys | tail -1 | awk‘{print $3}

    必须逐一浏览50台服务器才能获得此信息。我知道使用Windows中的WMI,我可以创建批处理脚本来获取系统信息。
    是否可以使用脚本或某种管理工具在多台服务器上的Linux中运行此脚本?

  • 苏吉思 2014年11月23日,上午1:21

    很棒的文章。非常感谢 -

  • 维格涅什 2014年11月24日,上午4:18

    嗨Tanujib,

    已经很晚了,但是下面的命令会给你结果

    awk‘{ for (i=2;i<=NF;i=i+2) {打印$ 1,$i,$(i+1)}}'

  • 维格涅什 2014年11月24日,上午4:31

    嗨苏达珊,

    由于+是特殊字符,必须将其转义,下面将为您提供所需的结果。

    awk-F’|\\+’ ‘{print $3}’ <>

  • 维格涅什 2014年11月24日,上午4:35

    嗨,范怡

    只需在打印时交换

    awk‘{打印$ 1,$ 4,$ 3,$ 2,$ 5}<>

  • 拉玛那 2014年12月12日,上午10:59

    嗨,

    我有如下员工表。

    100 汤玛士 Manager 营业额 $5,000
    200 Jason Developer 技术 $5,500
    300 Sanjay Sysadmin 技术 $7,000
    400 尼莎 Manager Marketing $9,500
    500 Randy DBA 技术 $6,000

    我需要$ 1 = 300和$ 3 = 营业额的数据(即员工人数100,部门销售额)

  • 阿比舍克 2014年12月23日,上午2:19

    我想使用shell脚本在Unix中按列比较两个.csv文件

    科幻le1
    METASRCIDBMVTRIDMersionIDCOUNTRYCurr
    MET_CCDV14121011081 RECENT US USD
    MET_CCDV141210110810 RECENT US USD
    MET_CCDV141210110811 RECENT GB GBP
    MET_CCDV141210110812 RECENT IE GBP
    MET_CCDV141210110813 RECENT GB GBP
    MET_CCDV141210110814 RECENT AU AUD
    MET_CCDV141210110815 RECENT HK HKD
    MET_CCDV141210110816 RECENT SG SGD

    科幻le2
    METASRCIDBMVTRIDMersionIDCOUNTRYCurr
    MET_CCDV14121011081 RECENT US USD
    MET_CCDV141210110810 RECENT US USD
    MET_CCDV141210110811 RECENT GB GBP
    MET_CCDV141210110812 RECENT IE GBP
    MET_CCDV141210110813 RECENT US GBP
    MET_CCDV141210110814 RECENT AU AUD
    MET_CCDV141210110818 RECENT HK HKD
    MET_CCDV141210110816 RECENT SG SGD

    输出
    讯息:档案不一样
    并且特定单元格中的更改应突出显示

    MET_CCDV141210110813 RECENT “US” GBP
    MET_CCD“V141210110818” RECENT HK HKD

  • 维格涅什 2015年1月15日,晚上10:50

    嗨Ramana,

    以下将为您工作。

    awk‘($1==100 && $4==”Sales”)’ <>

  • 维格涅什 2015年1月15日,下午11:51

    这样的事情会有所帮助
    grep -Fxvf 科幻le1 科幻le2

  • 苏伦德拉 2015年1月17日,上午11:38

    我有两个csv文件
    error.csv
    ———————————————–
    “Legacy ID”, “Message”
    12222,”Pass”
    12345,”Fail”

    success.csv
    ———————————
    “ID”,”Legacy ID”
    1,12345
    2,45678

    我要合并这两个文件并创建一个文件,如下所示
    “ID”,”Legacy ID”,”Message”
    ”,12222,”Pass”
    ”,12345,”Fail”
    1,12345,”
    2,45678,”

    我是Linux新手,请您帮忙

  • 维格涅什 2015年1月18日,晚上10:42

    您好Surendra,

    下面会工作

    awk‘NR==FNR{print “\”””,”$0;next} {print $0″,””\””}’error.csv success.csv

    第一个打印语句将打印第一个文件,下一个打印语句将打印另一个文件

  • 百合 2015年1月20日,上午11:00

    如何删除重复项
    例如
    col1 col2 col3
    一个10.3
    每年15.7
    一个x 14.3
    宽x 10.3
    约15.7年
    宽x 14.3
    我想有
    一个10.3
    每年15.7
    宽x 10.3
    约15.7年
    这意味着我要对col1和col2具有唯一的条目。

  • 维格涅什 2015年1月20日,晚上10:31

    嗨,莉莉,

    下面会工作
    awk‘{k = $ 1 $ 2; if(!a [k])a [k] = $ 0} 结束 {for(k in a){print a [k]}}’ <>

  • 拉克什 2015年4月13日,上午12:59

    好啊 article for someone new 至 awk

  • 阿伦·M 2015年6月3日,晚上9:18

    输入:
    ========
    ilapp_cl1:stg_00 ilapp_ex1:stg_00_r 0:10:34
    ilapp_cl1:test_00 ilapp_ex1:test_00_r 0:10:34
    netezza_cl1:prod_00b netezza_ex1:prod_00b_r 0:20:33
    oracore11g_cl1:ORPP2 oracore11g_ex1:ORPP2_r 9:5:37
    oracore11g_cl1:ORPP2_arch oracore11g_ex1:ORPP2_arch_r 9:5:37
    oracore11g_cl1:ORPP2_redo oracore11g_ex1:ORPP2_redo_r 9:5:37
    vmcore_cl1:clc2_ds_1000 vmcore_ex1:clc2_dsr_1000 12:15:33
    vmcore_cl1:clc2_ds_1001 vmcore_ex1:clc2_dsr_1001 12:15:34
    vmcore_cl1:clc2_ds_1002 vmcore_ex1:clc2_dsr_1002 12:15:34

    输出:
    ===========

    要列出我在下面粘贴的第三列第一字段的输出大于10

    vmcore_cl1:clc2_ds_1000 vmcore_ex1:clc2_dsr_1000 12:15:33
    vmcore_cl1:clc2_ds_1001 vmcore_ex1:clc2_dsr_1001 12:15:34
    vmcore_cl1:clc2_ds_1002 vmcore_ex1:clc2_dsr_1002 12:15:34
    vmcore_cl1:clc2_ds_1003 vmcore_ex1:clc2_dsr_1003 12:15:34

  • 是的 2015年7月28日,上午12:08

    awesome 做cumennt 上 awk!!!

  • 匿名 2015年7月28日,下午12:11

    awk-F: ‘{split($3,aa,” “); if (aa[2] >10) print }’ 11.txt

  • 阿伦 2015年7月28日,下午12:13

    awk-F: ‘{split($3,aa,” “); if (aa[2] >10) print }’ 11.txt

  • 亨利 2015年9月3日,下午7:45

    @
    拉克什
    awk‘{split($NF,blah,”:”)}{if (blah[1] > 10) {print }}’

  • 亨利 2015年9月3日,下午7:46

    例子7
    不需要BEGIN语句
    只需在END中添加0

  • 舒巴姆 2015年9月7日,上午11:42

    很好解释………..

  • 匿名 2015年12月11日,上午5:03

    按照以下格式创建一个名为employee的数据文件:
    一种。 EmpCode字符

    b。 EmpName字符

    C。年级字符

    d。多年经验数值

    e。基本工资数字

    $ vi员工

    A001 ARJUN E1 01 12000.00

    A006阿南德E1 01 12450.00

    A010拉杰什E2 03 14500.00

    A002摩汉E2 02 13000.00

    A005约翰E2 01 14500.00

    A009拒绝史密斯E2 04 17500.00

    A004威廉姆斯E1 01 12000.00

    2.)对EmpCode上的文件进行排序。

    $ cut –f1员工|分类

    对EmpName上的文件进行排序。
    $ cut –f2员工|分类

    Sort the 文件on
    (i)递减基本工资

    (ii)多年经验的增加。

    (i)$ cut –f5员工|排序–r

    (ii)$ cut –f4员工|分类

    显示文件中包含其详细信息的员工数量。
    wc –l

    Display all records with ‘smith’ a part of employee 名称.
    削减–f2 –d“”员工| grep‘^ [smith]’| wc –l

    显示所有以“ B”开头的EmpName的记录。
    $ cut –f2员工| grep‘^ [B]’| wc –l

    显示员工等级为E2且具有2至5年工作经验的员工的记录。
    $ cut –f3员工| grep‘[* 2] |裁减–f4员工| grep‘[2-5]’

    Store in ‘file 1’ the 名称s of all employees whose basic pay is between 10000 and 15000.
    $ cut –f2,5员工| grep‘[10000-15000]’> rec

    显示所有未达到E2级的员工的记录。
    $ cut –f3员工| grep‘[* 1]’

  • 阿伦 2016年2月12日,上午12:11

    我想打印table.in我不想为此打印2行我应该使用什么命令…??/

  • 2016年4月9日,晚上11:32

    @Arun M 2015年6月3日,下午9:18

    awk‘match($ 3,/([[0-9] +):[0-9] +:[0-9] + /,arr)&& arr[1] > 10’ input_file

  • 2016年4月9日,晚上11:37

    @ramana 2014年12月12日,上午10:59

    awk‘$1 == 300 && $4 == “Sales”‘ 输入文件

  • J·塞米斯 2016年5月23日,下午5:30

    使用awk的另一种简便方法是确定行数并将其存储到变量中

    说您的文件(myFile.txt)包含

    Line1
    Line2
    Line3

    MYCOUNT=`wc -l myfile.txt | awk‘{ print $1 }’ `
    回声$MYCOUNT

    会将数字3分配给$ MYCOUNT

  • 拉克什·库玛(Rakesh kumar) 2016年5月27日,上午3:45

    好啊…awk示例..您已经用简单的方法描述了每个示例,易于理解。

  • 宝拉 2016年6月7日,上午9:36

    很有启发性的帖子,谢谢!

    我想知道如何将查询结果打印在一个新文件中。我有一个很大的数据文件,我想根据某个列将其分成多个较小的文件。

    提前致谢!

  • 维克多·雨果·诺伊曼(VíctorHugo Neumann) 2016年7月5日,晚上7:36

    你好拉梅什:
    Does awkprocess Unicode strings?

    非常感谢你

  • 拉吉·迪利班 2016年12月16日,上午11:35

    很棒的解释。

  • 阿布萨尔·艾哈迈德·谢克 2017年1月18日,上午1:21

    我正在寻找有关shell脚本的专家级培训,您能提供同样的服务吗?

  • 亚娜 2017年3月21日,上午5:52

    由于我是awkkkk的新手,它非常有用。

  • 匿名 2017年3月24日,上午6:16

    非常好…it helped me a lot…Thank 您 🙂

  • 麦克风 三月6,2019,上午10:30

    我需要您对Shell脚本的awk部分进行细微更改的帮助,以仅生成大于500m的日志文件…。请记住,该脚本在sun,aix,hpux以及各种unix和windows上运行。这是脚本…

    [。#命令,用于收集侦听器日志
    设置v_listener_command“; 回声‘侦听器日志’ | tr ‘\\n’ ‘:’; 回声” | tr ‘\\n’ ‘ ‘; lsnrctl状态| grep日志| awk‘{ print \$4 }’ | sed‘s / alert \\ / log.xml / trace \\ / listener.log / g’ | tr ‘\\n’ ‘ ‘; 回声‘-‘ | tr ‘\\n’ ‘ ‘; -sk`lsnrctl状态| grep日志| awk‘{ print \$4 }’ | sed‘s / alert \\ / log.xml / trace \\ / listener.log / g’` | awk‘{如果(\ $ 1/1024 + 0.5>= 500 ) print $1 }’ | tr ‘\\n’ ‘ ‘ ; 回声‘(Mb)'”]

    错误:
    ——

    能够’t read “1”: no such variable
    在执行时
    “设置v_listener_command“; 回声‘侦听器日志’ | tr ‘\\n’ ‘:’; 回声” | tr ‘\\n’ ‘ ‘; lsnrctl状态| grep日志| awk‘{ print \$4 }’ | s…”
    (文件“/CTM/ctmuser/scripts/GetDBLog/exec_sshlogin_don.exp” line 101)

发表评论