Bash脚本的奇怪错误,没有错误消息

时间:2017-03-01 07:29:28

标签: bash shell csv

我有多个文本文件,其中包含命名每个变量的标题。变量通常命名为“FCCXX102 @ PV”或类似的东西。

我正在尝试将每个列与包含时间戳的第一列分隔到自己的文件中。

此脚本尝试将两列分隔为tmp.txt文件,然后将2列文件重命名为与上面的变量名对应。例。 FCCXX102@PV.csv

#!/bin/bash
str=ColCount
str2=Total
total=0

for f in ../data/*.txt
    do
        colcount=$(head -n 1 $f | grep -o "," | wc -l)
        echo $str $colcount
        total=$((colcount + total))
        echo $str2 $total
        i=1
        echo I $i
        while [ $i -le $colcount ];do
            cut -d',' -f1,$((i+1)) $f > ../tag_data/tmp.txt
            tagname="$(head -n 1 ../tag_data/tmp.txt | cut -d',' -f2)"
            echo $tagname
            mv ../tag/tmp.txt ../tag_data/$tagname".csv"
            i=$((i+1))
            echo I $i
        done
    done

第一个tmp.txt文件很快显示出来。错误是显示的唯一文件以数字5FIXXX或100VXXXX@PV.csv等开头。此外,写入这些文件的速度很慢,所以我觉得我在某处的while循环中出错了。

我的代码是否以某种方式排除以字母开头的变量?

是否有更快或更简单的方法来执行此操作?我总共有大约1300个变量,每个文本文件中有一百万行。

如果尝试,请输入

作为标记名:

tagname="$( cat tmp.txt | grep time | cut -d',' -f 2| awk'{print $1}') 

1 个答案:

答案 0 :(得分:0)

根据您在标记名中提到的代码,您可以使用下面的awk one liner实现它 -

awk -F, '/time/ {split($2,a," "); print $1}' tmp.txt

如果这是其他成员提及的意图,如果您可以共享输入和预期输出。我们可以尝试解决您的问题。