我想知道如何从txt文件中过滤编程语言的名称。 我已经在AWK中使用了下面的句子,但是我不能得到我想要的:
($1 ~ /[A-Za-z]*/) && ( ($3 ~ /-/) || ($4 ~ /-/) )
任何想法如何做到这一点? 因为你可以看到,没有规定的方式写行。
换句话说,我有以下几行,但我只想打印编程语言名称
2.PAK - AI language with coroutines. "The 2.PAK Language: Goals and Description", LF 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
提前致谢!
看起来像“ – ”可能是一个很好的分隔符,给定的文件:
$ cat /tmp/a 2.PAK - AI language with coroutines. "The 2.PAK Language: Goals and Description", LF 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 $
如果我理解你的文件是由空行分隔的多行“节”组成的,并且每个“节”以一个语言名称跟着一个字母开头,那么你可以这样写:
awk 'BEGIN { RS = "\n\n"; FS = " - " } { print $1 }'
BEGIN
块(在读取第一个记录之前运行)将记录分隔符RS
为"\n\n"
(两条换行符,即空行),因此每个节都是单个AWK记录,字段分隔符FS
为-
,所以语言名称是节的第一个“字段”。 块{ print $1 }
打印每个记录中的第一个字段。