【问题标题】:Weird Error for Bash Script with no error messageBash 脚本的奇怪错误,没有错误消息
【发布时间】:2017-03-01 07:29:28
【问题描述】:

我有多个文本文件,其中的标题为每个变量命名。这些变量通常命名为“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 个变量,每个文本文件中有 100 万行。

如果尝试使用标记名:

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

【问题讨论】:

  • 您输入的内容是什么样的?如果您提供示例输入和预期输出,看起来整个事情都可以在 awk 中完成
  • bash 不是一种文本处理语言,请使用正确的工具。
  • @n.m.感谢您的回复,您能推荐一个更合适的技术吗?
  • @muru 明天早上我会看看我是否可以将前 5 行显示出来。上面的脚本试图在一夜之间运行,但我不确定它会完成

标签: bash shell csv


【解决方案1】:

根据您在标记名中提到的代码,您可以使用下面的 awk 一个衬垫来实现它 -

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

如果这不是预期的事情,那么正如其他成员所提到的,如果您可以共享输入和预期输出。我们可以尝试解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多