变量CSV解析脚本

时间:2015-12-07 19:43:35

标签: bash shell parsing csv unix

所以我正在尝试编写一个脚本,该脚本将获取任何给定的CSV文件,其中包含非固定数量的行/列,并将每个字段解析为脚本另一部分的输入。

脚本应该取每个字段,并将其存储在一个名为f {var}的变量中,其中{var}是数字变量。稍后需要解析这些变量以识别来自IP地址+ CIDR(x.x.x.x / yy)的IP地址。但是,在弄清楚如何处理变量变量之前,我遇到了一些问题(对于脚本来说很新)。

我一直在尝试在这个和其他网站上找到的一些解决方案,但我在测试时观察到的行为似乎与所描述的不符。例如,grep -o "...$"(用于提取最后3个字符)似乎在某些情况下仅返回2个字符而不是3个字符。我的测试csv中的两行都是4列IP地址。

我跑了这样的事情

input="/home/admin/parsetest.cvs" 
while IFS=',' read -r f1 f2 f3 f4
do
  echo "$f1 $f2 $f3 $f4"
done < "$input"

但它只生成了一行,而不是echo两行到STDOUT。在-xv打开的情况下查看它,它看起来像是读取第一行,回显它,检查IFS,再次读取,然后终止。我很确定我做错了什么,但我不确定是什么。

[Expert@LabFW01:0]# ./csvparse.sh 
#!/bin/bash -xv 
echo "IFS delimiter set to ," 
+ echo 'IFS delimiter set to ,' 
IFS delimiter set to , 

input="/home/admin/parsetest.csv" 
+ input=/home/admin/parsetest.csv 
while IFS=',' read -r f1 f2 f3 f4 
do 
    echo "$f1 $f2 $f3 $f4" 
done < $input 
+ IFS=, + read -r f1 f2 f3 f4 ' 
echo '192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 
+ IFS=, + read -r f1 f2 f3 f4

0 个答案:

没有答案