所以我在.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
显而易见的问题是,我要经历两次数据切割,然后在我只需要一次时添加。这被证明非常缓慢,任何关于速度提升的想法都会有所帮助。
答案 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是否为空。如果没有,则打印格式化的数据。