我们需要一个shell脚本来检索当前目录中的所有txt文件,并为每个文件检查它是空文件还是包含任何数据它(我相信可以用wc命令完成)。用文件名替换unix文件最后一行的第一个字符
如果为空,则忽略它别的,因为在我们的条件,在这个目录下的所有txt文件要么是空或包含大量的数据,其中该文件的最后一行是这样的:
Z|11|21||||||||||
即最后一行具有字符Z
然后|
然后an integer
然后|
然后an integer
然后某些数字|
符号。
如果文件不是空的,那么我们只是假定它具有这种格式。最后一行之前的数据是乱码,对我们来说不是必需的,但最后一行之前至少有一行,即如果文件非空,至少会有两行保证。
我们需要一个代码,其中如果文件非空,那么它需要该文件,用'filename.txt'替换最后一行中的'Z',并将新数据写入另一个文件tempfile中。最后一行将因此变为:
filename.txt|11|21|||||||
该行的剩余部分保持不变。从临时文件中取出最后一行,即filename.txt|int|int|||||
并合并成最终文件。 tempfile的内容被清除,以接收来自同一目录中的下一个filename.txt的数据。 finalfile具有该目录中所有非空txt文件的最后一行的编辑版本。
如:FILE1.TXT有数据
....
....
....
Z|1|1|||||
和FILE2.TXT有数据
....
....
....
Z|2|34|||||
脚本运行之后,FILE1.TXT的新数据
.....
.....
.....
file1.txt|1|1||||||
这将写入一个新的文件,说temp.txt最初是空的。从那里最后一行被合并到一个文件final.txt中。所以,在final.txt的数据是:
file1.txt|1|1||||||
这个合并后,在TEMP.TXT数据被清除
FILE2.TXT的新数据
...
...
...
file2.txt|2|34||||||
这将被写进相同的文件temp.txt。从那里,最后一行被合并到同一个文件final.txt中。
所以,在final.txt数据是
file1.txt|1|1||||||
file2.txt|2|34||||||
考虑返回是类型TXT和非空的,并在同一目录中的文件,在最终数据的N个后。TXT成为
file1.txt|1|1||||||
file2.txt|2|34||||||
file3.txt|8|3||||||
.......
.......
.......
fileN.txt|22|3|||||
对于一些条件,我已经知道了命令,像
对于文本类型的目录查找文件,
find <directory> -type f -name "*.txt"
连续服用的最后一行,并合并成另一个文件
tail -1 file.txt>>destination.txt
这听起来像是有人要求他们为他们完成工作。如果是这样,你将支付多少钱一个解决方案:)如果不是,下面的一些基本的bash代码。 – 2011-12-15 07:51:58