首页 > 解决方案 > 将数组内容添加到 csv 文件中

问题描述

我搜索了许多试图解决我的问题的网站,但大多数答案都与使用单个数组有关。我正在尝试阅读 2x 文本文件。每个文件都填充了多个 csv 行。我从这两个文件中搜索并选择非常具体的信息。我的目标是编写一个包含我选择的信息的单个 CSV 文件。我已经阅读了 2x 输入文件。我设法获得了我选择的特定数据。我如何捕获数据是使用数组。我有效地读取了每个参数最多 64 倍的值。大约有 20 倍这样的参数。

例如,我使用以下方法来做到这一点:

parameter1[counter]
parameters2[counter] etc

所有 20x 参数值都相互关联,这就是计数器值所确保的。

我需要对这些捕获的值做的是编写一个 csv 文件。每行(最多 64 倍)应包含 20 倍参数。

所以,预期的结果应该是:

para1-1,para2-1,para3-1,para4-1,,,,,
para1-2,para2-2,para3-2,para4-2,,,,,
etc.

这是一些代码来显示我所做的事情:

vall="Value="
write1count=1
recallcount=1

# functions here

read1_function() {
 exec 8<$file1
            while read -r cap1in <&$FD1
             do
 if [[ "$maccount" -lt 65 ]]; then
    mac_function
    fi
 if [[ "$antcount" -lt 65 ]]; then
    ant_function
    fi
 if [[ "$namecount" -lt 65 ]]; then
    name_function
    fi
let count++
done < "$file1"
}

mac_function() {
 macvariable="OID=.1000.3.1.6.2.1.12."
 if [[ "$cap1in" == *$macvariable* ]]; then
   let maccount++
   if [[ "$cap1in" == *$macvariable$maccount* ]]; then
     macaddress[maccount]=${cap1in#*$vall}
  fi
 fi
 }

ant_function() {
 antvariable="OID=.1000.3.1.6.2.1.6."
 if [[ "$cap1in" == *$antvariable* ]]; then
   let antcount++
   if [[ "$cap1in" == *$antvariable$antcount* ]]; then
     antconf[antcount]=${cap1in#*$vall}
  fi
 fi
 }

name_function() {
 namevariable="OID=.1000.3.1.6.2.1.4."
 if [[ "$cap1in" == *$namevariable* ]]; then
   let namecount++
   if [[ "$cap1in" == *$namevariable$namecount* ]]; then
     nameconf[namecount]=${cap1in#*$vall}
  fi
 fi
 }

# step is to create export file containing all customer config
 exec 6>$file3   #open file3 to dump new config in

 while [ $recallcount -lt 65 ]; do
 echo recall $recallcount
  if [[ "${macaddress[recallcount]}" == *:* ]]; then
   echo $write1count,2,1,${macaddress[recallcount]},${antconf[recallcount]},${nameconf[recallcount]} >>$file3

exec 6>&-
echo "Job completed"
exit

但是,我没有得到想要的结果。

标签: arrayslinuxbashshellscripting

解决方案


根据@Armali .....我从我的代码中包含了一些复制/粘贴。我遗漏了一些部分......现在添加到最后......

一些样本信息:

macaddress[recallcount]=00:12:23:45:67:89
antconf[recallcount]=2
nameconf[recallcount]=customername

.

vall="Value="
write1count=1
recallcount=1

# functions here

read1_function() {
 exec 8<$file1
            while read -r cap1in <&$FD1
             do
 if [[ "$maccount" -lt 65 ]]; then
    mac_function
    fi
 if [[ "$antcount" -lt 65 ]]; then
    ant_function
    fi
 if [[ "$namecount" -lt 65 ]]; then
    name_function
    fi
let count++
done < "$file1"
}

mac_function() {
 macvariable="OID=.1000.3.1.6.2.1.12."
 if [[ "$cap1in" == *$macvariable* ]]; then
   let maccount++
   if [[ "$cap1in" == *$macvariable$maccount* ]]; then
     macaddress[maccount]=${cap1in#*$vall}
  fi
 fi
 }

ant_function() {
 antvariable="OID=.1000.3.1.6.2.1.6."
 if [[ "$cap1in" == *$antvariable* ]]; then
   let antcount++
   if [[ "$cap1in" == *$antvariable$antcount* ]]; then
     antconf[antcount]=${cap1in#*$vall}
  fi
 fi
 }

name_function() {
 namevariable="OID=.1000.3.1.6.2.1.4."
 if [[ "$cap1in" == *$namevariable* ]]; then
   let namecount++
   if [[ "$cap1in" == *$namevariable$namecount* ]]; then
     nameconf[namecount]=${cap1in#*$vall}
  fi
 fi
 }

# step is to create export file containing all customer config
 exec 6>$file3   #open file3 to dump new config in

 while [ $recallcount -lt 65 ]; do
 echo recall $recallcount
  if [[ "${macaddress[recallcount]}" == *:* ]]; then
   echo $write1count,2,1,"${macaddress[recallcount]}","${antconf[recallcount]}","${nameconf[recallcount]}" >>$file3

  echo writecount $write1count
  let write1count++
  fi

 let recallcount++;
 done

exec 6>&-
echo "Job completed"
exit

上面的最终结果:

 ,customername

推荐阅读