Bash/Shell:CSV文件处理问题
我编写了一个Bash/Shell:CSV文件处理问题,bash,shell,csv,awk,sed,Bash,Shell,Csv,Awk,Sed,我编写了一个bash脚本,该脚本调用Python脚本来扫描漏洞: #scan.sh while IFS=, read -r n d ;do python scan.py $d 443 | sed "s/^\(.\)/$n,\1/" done < Input.csv Output.csv应该如下所示: 1,abc.com,True,2016-03-06 1,abc.com,False,2016-03-06 1,abc.com,True,2016-03-06 1,abc.com,Tru
bash
脚本,该脚本调用Python脚本来扫描漏洞:
#scan.sh
while IFS=, read -r n d ;do
python scan.py $d 443 | sed "s/^\(.\)/$n,\1/"
done < Input.csv
Output.csv
应该如下所示:
1,abc.com,True,2016-03-06
1,abc.com,False,2016-03-06
1,abc.com,True,2016-03-06
1,abc.com,True,2016-03-06
2,xyz.com,False,2016-03-06
2,xyz.com,False,2016-03-06
2,xyz.com,False,2016-03-06
2,xyz.com,False,2016-03-06
3,pqr.com,True,2016-03-06
3,pqr.com,True,2016-03-06
3,pqr.com,True,2016-03-06
3,pqr.com,True,2016-03-06
........................
每个ID
将在output.csv
中有四个条目,结果各不相同
ID
的四个条目中的任何一个是True
,则它必须是True
,并且需要有一个ID
条目ID
的所有四个条目都是False
,则它必须是False
,并且只有一个条目ID
的所有四个条目都是True
,则它必须是True
,并且只有一个条目仅供参考:我是bash脚本的初学者。awk非常简单:
awk -F, -v OFS=, '
$3 == "True" {ntrue++}
NR%4 == 0 {
$3 = (ntrue > 0) ? "True" : "False"
print
ntrue = 0
}
' output.csv > processed_out.csv
awk非常简单:
awk -F, -v OFS=, '
$3 == "True" {ntrue++}
NR%4 == 0 {
$3 = (ntrue > 0) ? "True" : "False"
print
ntrue = 0
}
' output.csv > processed_out.csv
awk
救援
$ pr -4ats, file |
awk -F, -v OFS=, '{for(i=3;i<=NF;i+=4)
if($i=="True") {$3=$i; break};
print $1,$2,$3,$4}'
1,abc.com,True,2016-03-06
2,xyz.com,False,2016-03-06
3,pqr.com,True,2016-03-06
$pr-4ats,文件|
awk-F,-v of s=,{代表(i=3;iawk
救援
$ pr -4ats, file |
awk -F, -v OFS=, '{for(i=3;i<=NF;i+=4)
if($i=="True") {$3=$i; break};
print $1,$2,$3,$4}'
1,abc.com,True,2016-03-06
2,xyz.com,False,2016-03-06
3,pqr.com,True,2016-03-06
$pr-4ats,文件|
awk-F,-v of s=,{for(i=3;i)为什么要在bash中执行此操作?您已经有了一个python脚本来执行“重要”操作工作。首先让脚本以您想要的格式输出数据不是更容易吗?@MarcB我不想更改主脚本中的任何单行编辑,坦率地说,我更感兴趣的是学习bash编程的新知识;)@MarcB即使在#scan.sh脚本中,我也在插入/前缀每个域的ID(sed“s/^(../$n,\1/”)转换为输出结果。事实上,我很喜欢bash!有什么理由要在bash中执行此操作吗?您已经有了一个python脚本来执行“重要”操作工作。首先让脚本以您想要的格式输出数据不是更容易吗?@MarcB我不想更改主脚本中的任何单行编辑,坦率地说,我更感兴趣的是学习bash编程的新知识;)@MarcB即使在#scan.sh脚本中,我也在插入/前缀每个域的ID(sed“s/^(../$n,\1/”)到输出结果。我实际上爱上了bash!谢谢!这是干净的方法谢谢!这是干净的方法尼斯。一种替代pr
的方法是paste-d,--
尼斯。另一种替代pr
的方法是paste-d,--