所以我正在尝试编写一个脚本,该脚本将获取任何给定的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