2011-12-15 106 views
-1

我们需要一个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 
+0

这听起来像是有人要求他们为他们完成工作。如果是这样,你将支付多少钱一个解决方案:)如果不是,下面的一些基本的bash代码。 – 2011-12-15 07:51:58

回答

1

您可以使用'sed'替换“z”字符。你将会处于循环状态,所以你可以使用你拥有的文件名。这只是删除Z,然后回显行和文件名。

祝你好运。

#!/bin/bash 
filename=test.txt 
line=`tail -1 $filename | sed "s/Z/$filename/"` 
echo $line 

编辑:

你第一次运行find命令,看到输出?当然在每行的开头有一个./。这将打破sed,因为sed使用/作为分隔符。它也不适用于你的问题陈述,在陈述文件之前没有额外的“/”。你说当前目录,你给的命令将遍历ALL子目录。尝试简单并使用LS

# `2>/dev/null` puts stderr to null, instead of writing to screen. this stops 
# us getting the "no files found" (error) and thinking it's a file! 
for filename in `ls *.txt 2>/dev/null` ; do 
    ... stuff ... 
done 
+0

用于`find的文件名。 -type f -name“* .txt”` do line =`tail -1 $ filename | sed“s/Z/$ filename /”` echo $ line done – Ashish 2011-12-15 08:37:32

相关问题