EDIT2 已经在 cmets 部分与 OP 进行过交谈,并且 OP 提到如果
任何一行都从任何字母或数字开始,它应该转到相应的字母,否则它应该转到另一个文件,然后应该尝试跟随。
awk '{if($0 ~ /^[a-zA-Z0-9]/){file=substr($0, 1, 1)} else {file="symbol_file"};print >> (file);close(file)}' Input_file
OR 根据 Ed sir 的评论,上述解决方案的缩写形式。
awk '{file = (/^[[:alnum:]]/ ? tolower(substr($0,1,1)) : "symbol") ".txt"; print >> file; close(file)}' Input_file
EDIT1:
awk '{if($0~/^\\/ || $0~/^\//){file="symbol_file"} else {file=substr($0, 1, 1)};print >> (file);close(file)}' Input_file
请您尝试关注一次。
awk '{if($0~/^\\/){file=substr($0, 2, 1)} else {file=substr($0, 1, 1)};print >> (file);close(file)}' Input_file
添加了 OP 的方法修复和其他建议:
1- 你没有关闭后端的输出文件,如果你有巨大的 Input_file 肯定会有问题,最终会出现“打开的文件太多错误”;所以我把它修好了。
2- 您使用的是substr($0, 0, 1),这不应该是这样;在 substrindex starts from1not from0`.
3- 对于从\ 开始的行的问题,我已经检查了它的条件,如果行以\ 开头,则为输出文件取第二个字符或为输出文件名取第一个字符。