split命令,带有用户defind前缀和后缀

时间:2016-10-12 07:05:40

标签: linux shell unix

我有一个文件file_Md.csv,其中包含超过5000行。所以我想将原始文件拆分成多个文件,每个文件都有2000行。但结果文件的前缀应为file_Md,后缀应为.csv

实施例 file_Mda.csvfile_Mdb.csv同样聪明。

因此我使用下面的命令来加前缀 split -l 2000 -a 1 file_Md.csv file_Md

任何人都可以用后缀部分帮我吗?

1 个答案:

答案 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,那将非常简单。