我有多个文本文件,其中包含命名每个变量的标题。变量通常命名为“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}')
答案 0 :(得分:0)
根据您在标记名中提到的代码,您可以使用下面的awk one liner实现它 -
awk -F, '/time/ {split($2,a," "); print $1}' tmp.txt
如果这是其他成员提及的意图,如果您可以共享输入和预期输出。我们可以尝试解决您的问题。