如何根据行中特定符号的数量对包含字符串行的文件进行排序?

如何根据行中特定符号的数量对包含字符串行的文件进行排序?

假设我有一个很大的纯文本文件,每行都有一个字符串。该字符串仅由字母组成,但下划线除外_,下划线将字符串按音节划分。

我想根据字符串中下划线的数量对文本文件进行排序。将每组 X 个下划线放入各自的文件中可获得加分。

例子:

hel_lo
hi
su_per_u_ser
o_ver_flow

排序为:

hi
hel_lo
o_ver_flow
su_per_u_ser

我曾尝试使用正则表达式来执行此操作,但还没有找到计算下划线的正确方法(正则表达式让我彻底困惑)。

有人知道我该如何处理这个问题吗?

答案1

Python 使这变得简单...

open('out.txt', 'w').write('\n'.join(sorted(open('in.txt'), key=lambda x: x.count('_'))))

答案2

简单代码awk

#!/usr/bin/awk -f

BEGIN   { FS = "_" }        # field separator = syllable separator
        {                   # for each input line
            if(NF > 0)      # if number of syllables > 0
                print $0 > "syllable-"NF".txt"  # print the line to a file
        }

将脚本放入文件中,然后将chmod a+x文件放入文件中。输入可以来自stdin或来自作为脚本参数指定的文件。

输出将按名为 的文件名排序,syllable-x.txt其中x是音节数。

答案3

甚至更简单:一行 bash 命令:

 cat testfile | while read line; do echo $line >> srt$(echo $line | fgrep -o _ | wc -l).txt ; done 

输出将出现在名为 srtN.txt 的文件中,其中 N 是该行中下划线字符出现的次数。

相关内容