小编ssb*_*sts的帖子

GROUP BY + CASE语句

我有一个工作查询,按硬件模型和结果对数据进行分组,但问题是有很多"结果".我试图将其减少到"如果结果= 0然后保持为0,否则将其设置为1".这通常有效,但我最终得到:

    day     |      name      | type | case | count
------------+----------------+------+------+-------
 2013-11-06 | modelA         |    1 |    0 |   972
 2013-11-06 | modelA         |    1 |    1 |    42
 2013-11-06 | modelA         |    1 |    1 |     2
 2013-11-06 | modelA         |    1 |    1 |    11
 2013-11-06 | modelB         |    1 |    0 |   456
 2013-11-06 | modelB         |    1 |    1 |    16
 2013-11-06 | modelB         |    1 |    1 |     8
 2013-11-06 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql group-by case aggregate-functions

25
推荐指数
3
解决办法
20万
查看次数

bash:逐行读取文件,然后sed追加

我有一个文本文件,可以有X个字段,每个字段用逗号分隔.在我的脚本中,我逐行阅读,检查在该行上填充了多少字段,并确定我需要在该行的末尾追加多少逗号来表示所有字段.例如,文件如下所示:

Address,nbItems,item1,item2,item3,item4,item5,item6,item7    
2325988023,7,1,2,3,4,5,6,7
2327036284,5,1,2,3,4,5
2326168436,4,1,2,3,4
Run Code Online (Sandbox Code Playgroud)

应该成为这样的:

Address,nbItems,item1,item2,item3,item4,item5,item6,item7
2325988023,7,1,2,3,4,5,6,7
2327036284,5,1,2,3,4,5,,
2326168436,4,1,2,3,4,,,
Run Code Online (Sandbox Code Playgroud)

我的下面的脚本有效,但看起来非常低效.它是逐行阅读在大文件上有困难吗?导致经济放缓的是它吗?更好的方法吗?

#!/bin/bash

lineNum=0
numFields=`head -1 File.txt | egrep -o "," | wc -l`

cat File.txt | while read LINE
do
        lineNum=`expr 1 + $lineNum`
        num=`echo $LINE | egrep -o "," | wc -l`
        needed=$(( numFields - num ))
        for (( i=0 ; i < $needed ; i++ ))
        do
                sed -i "${lineNum}s/$/,/" File.txt
        done
done
Run Code Online (Sandbox Code Playgroud)

bash sed while-loop

3
推荐指数
1
解决办法
4260
查看次数

性能问题 - 循环遍历许多xml文件

我有一个多年的每日xml报告,我正在尝试通过每一个,找到购买日期,并确定它是否至少比文件的日期早一年.如果是这样,我将文件的名称和购买日期写入日志.问题是性能真的非常糟糕.

#!/bin/bash

for file in *xml ; do
fileDate=`echo ${file} | cut -c 18-35 | sed 's/.xml//'`
fileDateSeconds=`date --date="${fileDate}" +"%s"`
awk '/PurchaseDate/ {print}' ${file} >> /tmp/yamExport/tempFile.txt
cat /tmp/yamExport/tempFile.txt | while read input
do
        lineDate=`echo ${input} | cut -c 15-24`
        lineDateSeconds=`date --date="${lineDate}" +"%s"`
        delta=`expr $fileDateSeconds - $lineDateSeconds`
        if [ "$delta" -gt "31556926" ]
        then
        #echo "$file : $input"
        echo "$file : $input" >> /tmp/yamExport/yamExportTimestamps2.log
        fi
done
done
Run Code Online (Sandbox Code Playgroud)

起初我只是逐行循环遍历整个文件

cat ${file} | while read input
do
        if [[ "$input" =~ "PurchaseDate" ]] …
Run Code Online (Sandbox Code Playgroud)

xml bash performance awk loops

1
推荐指数
1
解决办法
69
查看次数