我有一个文件file_Md.csv
,其中包含超过5000
行。所以我想将原始文件拆分成多个文件,每个文件都有2000
行。但结果文件的前缀应为file_Md
,后缀应为.csv
。
实施例
file_Mda.csv
,file_Mdb.csv
同样聪明。
因此我使用下面的命令来加前缀
split -l 2000 -a 1 file_Md.csv file_Md
任何人都可以用后缀部分帮我吗?
答案 0 :(得分:3)
假设您的--additional-suffix
没有awk
选项可用,这里有一个awk -v N=1 -v pre="file_Md" -v suf=".csv" -v line=4000 'NR%line==1{x=pre N suf ;N++} {print > x}' filename
解决方案:
一般解决方案:对于数字增量:用户需要添加前缀,后缀和行数来做分区。
awk -v pre="file_Md" -v suf=".csv" -v line=4000 'BEGIN{split("ABCDEFGHIJKLMNOPQRSTUVWXYZ",A,"");} NR%line==1{x=pre A[N] suf ;N++}{print > x}' filename
字母表增量的一般解决方案:
awk 'BEGIN { split("ABCDEFGHIJKLMNOPQRSTUVWXYZ", A, "");} NR%4000==1{x="file_Md" A[N] ".csv";N++}{print > x}' file_Md.csv
针对您案例的硬编码解决方案:
ls -1
total 28K
file_Md.csv
示例:运行命令前的文件:
sh-4.1$ ls -1
file_Md.csv # this is orignal file
file_MdA.csv
file_MdB.csv
file_MdC.csv
file_MdD.csv
file_MdE.csv
执行命令后的文件:
awk -v N=1 'NR%4000==1{x="file_Md" N".csv";N++} {print > x}' file_Md.csv
如果您只想按数字递增:
NR%4000
说明:x
将找出可被4000整除的行。因此,请采取进一步行动。
定义一个变量"file_Md"
,该变量设置为a[N]
,然后.csv
,最后设置为split
,它是从split
函数生成的。
public static int SumDigits(int n)
{
int sum = n.ToString().ToCharArray().Select(x => (int)Char.GetNumericValue(x)).Sum();
return sum > 9 ? SumDigits(sum): sum;
}
函数将A-Z拆分为单个字母。如果您使用数字而不是Alphas,那将非常简单。