Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 在awk中只打印一些列_Unix_Awk - Fatal编程技术网

Unix 在awk中只打印一些列

Unix 在awk中只打印一些列,unix,awk,Unix,Awk,我想知道如何从txt文件中过滤编程语言的名称。 我在AWK中使用了以下句子,但我无法得到我想要的: ($1 ~ /[A-Za-z]*/) && ( ($3 ~ /-/) || ($4 ~ /-/) ) 你知道怎么做吗?因为正如你所看到的,没有规则的方式来写这些行 换句话说,我有以下几行,但我只想打印编程语言名称 2.PAK - AI language with coroutines. "The 2.PAK Language: Goals and Description",

我想知道如何从txt文件中过滤编程语言的名称。 我在AWK中使用了以下句子,但我无法得到我想要的:

($1 ~ /[A-Za-z]*/)  && ( ($3 ~ /-/) || ($4 ~ /-/) )
你知道怎么做吗?因为正如你所看到的,没有规则的方式来写这些行

换句话说,我有以下几行,但我只想打印编程语言名称

2.PAK - AI language with coroutines.  "The 2.PAK Language: Goals and
Description", L.F. Melli, Proc IJCAI 1975.

473L Query - English-like query language for Air Force 473L system.  Sammet
1969, p.665.  "Headquarters USAF Command and Control System Query
Language", Info Sys Sci, Proc 2nd Congress, Spartan Books 1965, pp.57-76.

3-LISP - Brian Smith.  A procedurally reflective dialect of LISP which uses
an infinite tower of interpreters. 
我只想筛选并显示以下行:

2.PAK

473L Query 

3-LISP
编辑:现在,同一句话是否适用于以下内容?

DML - 

  1. Data Management Language.  Early ALGOL-like language with lists,
graphics, on Honeywell 635.  

  2. "DML: A Meta-language and System for the Generation of Practical and
Efficient Compilers from Denotational Specifications"
我想我只需要修复一些RS和FS的东西,这样我就可以得到这条线了

DML

提前谢谢

如果我正确理解您的文件由多行“节”组成,这些节由空行分隔,并且每个“节”以语言名称开头,后跟
-
,则您可以编写:

awk 'BEGIN { RS = "\n\n"; FS = " - " } { print $1 }'
BEGIN
块(在读取第一条记录之前运行)将记录分隔符
RS
设置为
“\n\n”
(两个换行,即一个空行),因此每个节都是单个AWK记录,字段分隔符
FS
设置为
-
,因此语言名称是节的第一个“字段”。块
{print$1}
打印每条记录中的第一个字段。

如果文件为:

$ cat /tmp/a 
2.PAK - AI language with coroutines.  "The 2.PAK Language: Goals and
Description", L.F. Melli, Proc IJCAI 1975.

473L Query - English-like query language for Air Force 473L system.  Sammet
1969, p.665.  "Headquarters USAF Command and Control System Query
Language", Info Sys Sci, Proc 2nd Congress, Spartan Books 1965, pp.57-76.

3-LISP - Brian Smith.  A procedurally reflective dialect of LISP which uses
an infinite tower of interpreters. 
您可以使用以下选项:

$ awk -F ' - ' '/ - /{ print $1 }' /tmp/a
2.PAK
473L Query
3-LISP
$ 

谢谢你的快速回复@鲁克。它帮助我解决了这个问题。@MikePérez:不客气!如果您能将此标记为已接受的答案,我将不胜感激。(见附件)是的。但现在我有一个疑问,我已经修改了RS,这样我就可以过滤下面的行,只得到ESP:ESP-1。超简单帕斯卡。Pascal的子集。2.计量经济学软件包。时间序列的统计分析。我在awk程序中写的是BEGIN{RS=“\n\n\n\n”FS=“-”}但我无法让它工作,知道为什么吗?@MikePérez:因为断行不会出现在评论中,我不确定我是否完全理解了。但是
RS=“\n\n\n\n”
意味着您希望记录由五个换行的序列分隔,即四个空行的序列。我不认为那是你想要的?哦,我知道了。不,我不想那样。。。我想要的是过滤一些东西,比如我在博文中编辑的parragraph谢谢你的回答@cyberzYou're welcome。同样的命令也可以解析您添加的DML示例。您将如何将其编写为awk文件?我的意思是,不仅仅是像你发布的那样,你发布的指令是什么意思@cyberz?提前谢谢!这里它相当于给定命令行的awk脚本:BEGIN{FS=“-”}/-/{print$1}