Unix 在awk中只打印一些列
我想知道如何从txt文件中过滤编程语言的名称。 我在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",
($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}