首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用从另一个文件中读取的标记分隔每一行,并在结果文件中存储所有拆分词复合词。

用从另一个文件中读取的标记分隔每一行,并在结果文件中存储所有拆分词复合词。
EN

Unix & Linux用户
提问于 2020-07-03 14:11:08
回答 2查看 374关注 0票数 0

我希望将文件names中的每一行拆分为delim文件中的每个分隔符,并将惟一的单词组合存储到结果文件compounds中。应该从输出文件中删除names中未拆分的行。只有4个分隔符:-'+

重要的names文件包含utf-8编码的人名。

代码语言:javascript
运行
复制
$ cat delims
 (space is here)
-
'
+
$ cat names
Tania
Günter
Abdel+Aziz
Abdel'Piza
Märie-Pierre

输出复合文件应该是(排序不重要):

代码语言:javascript
运行
复制
Abdel
Aziz
Piza
Märie
Pierre
EN

回答 2

Unix & Linux用户

发布于 2020-07-03 19:11:57

使用greptrsort

注意:我们需要将-中的delims移动到文件的顶部或底部(否则tr会认为存在范围)。

grep获取包含分隔符字符的所有行,用换行符替换所有分隔符(用tr -d '\n' < delims获取delims中没有换行符的所有字符)。

将结果输送到sort -u以消除重复,并将输出重定向到compounds

代码语言:javascript
运行
复制
grep -F -f delims names | tr -- "$(tr -d '\n' < delims)" '\n' | sort -u > compounds

输出:

代码语言:javascript
运行
复制
$ cat compounds
Abdel
Aziz
Märie
Pierre
Piza
票数 0
EN

Unix & Linux用户

发布于 2020-07-04 00:45:45

我们首先用商函数建立一个正则表达式,它引用所有的特殊字符,然后通过正则表达式或|连接它们。我们跳过不包含至少一个来自regex元素的名称中的任何行。对于其余部分,我们在regex上拆分它们,然后只打印一行一个统一的元素。

代码语言:javascript
运行
复制
$ perl -lne '
    $re //= join "|", map { chomp;quotemeta; } ;
    next unless /$re/;
    print for grep { ! $seen{$_}++ } split /$re/;
' names < delims

Abdel
Aziz
Piza
Märie
Pierre
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/596531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档