从bash中的许多文件中检索,编辑和存储数据的最有效方法

时间:2014-06-12 19:39:55

标签: json bash file parsing

所以我在.log文件中有一堆数据。这些列是制表符分隔的,但我只需要第2列和第7列的数据(尽管第7列并不总是保证数据,但是在7之后还有更多的列。在这种情况下,列之前会有一个双制表符号8)

我当前的方法非常慢,我觉得必须有一个更好的方法,因为我经常比我应该更频繁地浏览数据。

   #First I iterate through all the files and att them to data.raw.log
   cat $f >> data.raw.log
   #Then cut out unneeded data.
   cut -f2,7 data.raw.log > data.log
   #I then need to parse the data into JSON
   while IFS=$'\t' read -r -a entry
   do
     if [ ! -z  ${entry[1]} ]; then
       echo "FORMATTED JSON HERE WITH ${entry[0]} AND ${entry[1]}" >> data.json
     fi
   done < data.log

显而易见的问题是,我要经历两次数据切割,然后在我只需要一次时添加。这被证明非常缓慢,任何关于速度提升的想法都会有所帮助。

2 个答案:

答案 0 :(得分:1)

使用awk

awk -F'\t' '$7 != "" { print "FORMATTED JSON HERE WITH " $2 " AND " $7 }' * > data.json

这里,我假设所有文件都在当前目录中。您应该能够轻松调整此值以适应文件的实际位置。

答案 1 :(得分:0)

好的,所以你将数据剪切成一个文件,然后解析该文件。这有点冗长。不仅如此,您首先将所有数据从一个文件复制到另一个文件。

你可以通过一个小的awk脚本实现同样的目的:

 $ cat file*.log | awk -F'\t' '{if ($7 != "") print "Formatted data here with " $1 " and " $7}' >output.log

Awk将输入作为标记,$ 1和$ 7(标签分隔),并检查$ 7是否为空。如果没有,则打印格式化的数据。