我需要一个unix命令,可以使用(“,”而不是)来转换以下.csv表:
.. 到
我认为awk或sed命令能够做到,但我无法理解。
对于那些想要查看原始csv的人:
"Area","Locale","Date","Prefix","INT","Cap","CF","loss","Fall","WR"
"base","NewYork","20150331","100","0","3.225","3.225","0","0","0"
"base","NewYork","20150930","100","0","3.225","3.225","0","0","0"
"base","NewYork","20160331","100","0","3.225","3.225","0","0","0"
"base","NewYork","20160930","100","0","3.225","3.225","0","0","0"
"base","NewYork","20170331","100","0","3.475","3.475","0","0","0"
"base","NewYork","20170929","100","0","3.475","3.475","0","0","0"
"base","NewYork","20180329","100","0","3.475","3.475","0","0","0"
"base","NewYork","20180928","100","0","3.475","3.475","0","0","0"
"base","NewYork","20190329","100","0","3.475","3.475","0","0","0"
到
"Area","Locale","Date","Prefix","INT","Cap","CF","loss","Fall","WR"
"base","NewYork","3/31/2015","100","0","3.225","3.225","0","0","0"
"base","NewYork","9/30/2015","100","0","3.225","3.225","0","0","0"
"base","NewYork","3/31/2016","100","0","3.225","3.225","0","0","0"
"base","NewYork","9/30/2016","100","0","3.225","3.225","0","0","0"
"base","NewYork","3/31/2017","100","0","3.475","3.475","0","0","0"
"base","NewYork","9/29/2017","100","0","3.475","3.475","0","0","0"
"base","NewYork","3/29/2018","100","0","3.475","3.475","0","0","0"
"base","NewYork","9/28/2018","100","0","3.475","3.475","0","0","0"
"base","NewYork","3/29/2019","100","0","3.475","3.475","0","0","0"
答案 0 :(得分:2)
通过Perl。
$ perl -pe 's~^([^,]*,[^,]*,")(\d{4})(0([1-9])|(1[012]))(\d{2})"~\1\4\5/\6/\2"~' file
"Area","Locale","Date","Prefix","INT","Cap","CF","loss","Fall","WR"
"base","NewYork","3/31/2015","100","0","3.225","3.225","0","0","0"
"base","NewYork","9/30/2015","100","0","3.225","3.225","0","0","0"
"base","NewYork","3/31/2016","100","0","3.225","3.225","0","0","0"
"base","NewYork","9/30/2016","100","0","3.225","3.225","0","0","0"
"base","NewYork","3/31/2017","100","0","3.475","3.475","0","0","0"
"base","NewYork","9/29/2017","100","0","3.475","3.475","0","0","0"
"base","NewYork","3/29/2018","100","0","3.475","3.475","0","0","0"
"base","NewYork","9/28/2018","100","0","3.475","3.475","0","0","0"
"base","NewYork","3/29/2019","100","0","3.475","3.475","0","0","0"
"base","NewYork","12/29/2019","100","0","3.475","3.475","0","0","0"
通过sed,
我刚刚将上述Perl正则表达式中的\d
替换为[0-9]
,因为sed不支持\d
符号。
$ sed -r 's~^([^,]*,[^,]*,")([0-9]{4})(0([1-9])|(1[012]))([0-9]{2})"~\1\4\5/\6/\2"~' file
"Area","Locale","Date","Prefix","INT","Cap","CF","loss","Fall","WR"
"base","NewYork","3/31/2015","100","0","3.225","3.225","0","0","0"
"base","NewYork","9/30/2015","100","0","3.225","3.225","0","0","0"
"base","NewYork","3/31/2016","100","0","3.225","3.225","0","0","0"
"base","NewYork","9/30/2016","100","0","3.225","3.225","0","0","0"
"base","NewYork","3/31/2017","100","0","3.475","3.475","0","0","0"
"base","NewYork","9/29/2017","100","0","3.475","3.475","0","0","0"
"base","NewYork","3/29/2018","100","0","3.475","3.475","0","0","0"
"base","NewYork","9/28/2018","100","0","3.475","3.475","0","0","0"
"base","NewYork","3/29/2019","100","0","3.475","3.475","0","0","0"
"base","NewYork","12/29/2019","100","0","3.475","3.475","0","0","0"
答案 1 :(得分:2)
$ awk 'BEGIN{FS=OFS="\",\""}
{$3 = substr($3,5,2)+0 "/" substr($3,7,2)+0 "/" substr($3,1,4)} 1' file
"Area","Locale","0/0/Date","Prefix","INT","Cap","CF","loss","Fall","WR"
"base","NewYork","3/31/2015","100","0","3.225","3.225","0","0","0"
"base","NewYork","9/30/2015","100","0","3.225","3.225","0","0","0"
"base","NewYork","3/31/2016","100","0","3.225","3.225","0","0","0"
"base","NewYork","9/30/2016","100","0","3.225","3.225","0","0","0"
"base","NewYork","3/31/2017","100","0","3.475","3.475","0","0","0"
"base","NewYork","9/29/2017","100","0","3.475","3.475","0","0","0"
"base","NewYork","3/29/2018","100","0","3.475","3.475","0","0","0"
"base","NewYork","9/28/2018","100","0","3.475","3.475","0","0","0"
"base","NewYork","3/29/2019","100","0","3.475","3.475","0","0","0"
根据您的预期输出,+0
会将03
转换为3
等。
答案 2 :(得分:1)
假设您的文件名为raw
:
cat <(head -n 1 raw) <(while read Area Locale Date Prefix INT Cap CF loss Fall WR; do echo \"${Area}\",\"${Locale}\",\"${Date:4:2}/${Date:6:2}/${Date:0:4}\",\"${Prefix}\",\"${INT}\",\"${Cap}\",\"${CF}\",\"${loss}\",\"${Fall}\",\"${WR}\"; done < <(tail -n +2 raw | column -ts"," | tr -d \"))
演练:使用column
拆分文件并删除&#39;&#34;&#39;&#39;使用tr
。然后将所有列读取为仅格式化Date
的参数。稍后它会在整个文件上激活while而不使用tail
}并使用head
将标头添加到使用<()
和cat
打开的临时描述符。< / p>
输出:
"Area","Locale","Date","Prefix","INT","Cap","CF","loss","Fall","WR"
"base","NewYork","03/31/2015","100","0","3.225","3.225","0","0","0"
"base","NewYork","09/30/2015","100","0","3.225","3.225","0","0","0"
"base","NewYork","03/31/2016","100","0","3.225","3.225","0","0","0"
"base","NewYork","09/30/2016","100","0","3.225","3.225","0","0","0"
"base","NewYork","03/31/2017","100","0","3.475","3.475","0","0","0"
"base","NewYork","09/29/2017","100","0","3.475","3.475","0","0","0"
"base","NewYork","03/29/2018","100","0","3.475","3.475","0","0","0"
"base","NewYork","09/28/2018","100","0","3.475","3.475","0","0","0"
"base","NewYork","03/29/2019","100","0","3.475","3.475","0","0","0"
请注意,这可用于操纵其他数据,因为所有内容都已解析...但是,对于解析csv
文件,您应该使用csv
解析器:)