bash脚本根据名称解析csv文件

时间:2013-10-08 09:11:11

标签: bash csv

我有多个名称为

的csv文件
   VAR1_VAR2_VAR3_VAR4.csv

所有文件在更改值时都具有相同的结构。 我试图通过每次修复一个或多个VAR来检索这些文件中的数据。 我试着编写一个脚本,但我有两个问题:

1-因为所有文件都具有相同的结构,所以我确切地知道所有字段,我想根据行号和列号检索数据(即$(R1,C4))。是不是可以这样做?

2-当我修改一个变量(即* _VAR2_VAR3_VAR4.csv)时VAR1有3个条目如何在循环中迭代这个变量?

我的剧本在这里(我的第一个试探性的)

  #!/bin/bash          
  #OLDFIS=$IFS
  #IFS=","
  awk -F "," '
  #-------------------------- Table 1  ----------------------- -------#
  BEGIN {

  print"=========================================================="

  printf"%-8s %-8s %-8s %-8s %-8s\n","Network size", "P_Energy", "E_Energy",      
 "All_energy","Latency"

  print"=========================================================="
  }



 {printf  "%-8d %-8d %-8d %-8d %-8d\n",$VAR1, $(R3,C3) ,$(R4,C4) ,$(R5,C5),$(R6,C6)   
  ,$(R7,C7)}' /home/jhon/Desktop/Simulator/results/*_VAR2_VAR3_VAR4.csv 

  #-----------------------------------------------------------------------------#

在这个例子中,我想修复VAR1,这将是我输出中的第一列。其他人提交我知道他们在文件中的坐标。

编辑1:

对于我的第一个问题,我将代码更改为:    NR == 3 {printf“%-20s”,$ 1} NR == 25 {printf“%-20s”,$ 2} NR == 12 {printf“%-20s”,$ 2}
   NR == 29 {printf“%-20s”,$ 2} NR == 49 {printf“%-20s”,$ 4}'/... PATH/simStats_P-    Mesh__random_16384_1E-4_16.csv> test.txt 我得到了理想的输出:

 ===================================================================================
Network size       P_Energy           E_Energy           All_energy         Latency             
=====================================================================================
                0.0402597           0.00767312          0.0479328           0.294311 

编辑2: 我现在通过使用FNR代替FN

获得所有值

对于第一行我放假值。知道如何根据名称添加循环来解析文件吗?

1 个答案:

答案 0 :(得分:0)

我使用了与awk的分割,我手动输入了我想要在第一列中显示的参数的数量。

 awk -F "," '
 FNR==1 {nb_param=split(FILENAME,param,"[_.]"); printf "%5s", param[7] }  
 FNR==25 {printf "%20s", $2 } 
 FNR==12 {printf "%20s", $2 } 
 FNR==29 {printf "%20s", $2 } 
 FNR==49 {printf "%20s\n\n", $4 }' *.csv