0

我想知道如何从 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

提前致谢!

4

2 回答 2

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
$ 
于 2013-08-11T19:37:21.870 回答
0

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

awk 'BEGIN { RS = "\n\n"; FS = " - " } { print $1 }'

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

于 2013-08-11T19:34:20.473 回答