分割文件由子从IBM行i外壳

我有很多线,如分割文件由子从IBM行i外壳

inv_2007_43324234234.csv 

inv_2007_43377774234.csv

inv_2007_43999994234.csv

inv_2011_43324265765.csv

inv_2007_43324298743.csv

inv_2008_97545234234.csv

inv_2011_43888234288.csv

一个大文件...

第二部分“ '' 是那一年。
有没有办法在一年之内将文件分成几个文件? 行不排序。每年应该有一个文件,其中包含年份在线的文件。 我使用ibm i shell。

感谢到目前为止 乔吉


我试过很多次让运行命令,但现在我有我想在回答中描述的错误。 基本问题由anubhava回答。 但我有另一个崩溃我的命令的问题。

我创造我的文件与

ls > myfiles.dat 

myfiles的列表中包含上述descrived的CSV文件。 如果我尝试awk命令

awk -F'_' '{out=$2 ".csv"; print > out}' myfiles.dat 

使用这个名单,我得到它被命名的.csv一个CSV文件。
现在我加载myfiles.dat到我的电脑,并在记事本++中打开它。
我复制它的一部分,并创建一个新文件myfilefromnotepad.dat。
现在我从我的电脑加载新的文件到服务器,并运行命令 - 它的工作原理?

但是为什么不能awk不能与ls创建的列表一起工作?

回答:

如果AWK可用,你可以这样做:

awk -F'_' '{out=$2 ".csv"; print > out}' file 

回答:

一个shell唯一的解决办法:

while read; do 

test -n "$REPLY" && echo $REPLY >> $(expr "$REPLY" : '\(inv_.*\)_').dat;

done < myfiles.dat


验证:

while read; do 

test -n "$REPLY" && echo $REPLY >> $(expr "$REPLY" : '\(inv_.*\)_').dat;

done <<END

inv_2007_43324234234.csv

inv_2007_43377774234.csv

inv_2007_43999994234.csv

inv_2011_43324265765.csv

inv_2007_43324298743.csv

inv_2008_97545234234.csv

inv_2011_43888234288.csv

END

结果:

head inv_*.dat 

==> inv_2007.dat <==

inv_2007_43324234234.csv

inv_2007_43377774234.csv

inv_2007_43999994234.csv

inv_2007_43324298743.csv

==> inv_2008.dat <==

inv_2008_97545234234.csv

==> inv_2011.dat <==

inv_2011_43324265765.csv

inv_2011_43888234288.csv

以上是 分割文件由子从IBM行i外壳 的全部内容, 来源链接: utcz.com/qa/259749.html

回到顶部