0

我有多个带有名称的 csv 文件

   VAR1_VAR2_VAR3_VAR4.csv

所有文件在内部具有相同的结构,只是值发生了变化。我试图通过每次修复一个或多个 VAR 来从这些文件中检索数据。我试图写一个脚本,但我有两个问题:

1-由于所有文件都具有相同的结构,所以我完全知道所有字段,我想根据行号和列号(即$(R1,C4))检索数据。不可能做到这一点吗?

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

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

  #!/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 获得所有值

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

4

1 回答 1

0

我将 split 与 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
于 2013-10-10T06:38:05.893 回答