假设我有一个很大的纯文本文件,每行都有一个字符串。该字符串仅由字母组成,但下划线除外_
,下划线将字符串按音节划分。
我想根据字符串中下划线的数量对文本文件进行排序。将每组 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 是该行中下划线字符出现的次数。