给定一个foo.txt
包含文件名的文件,例如:
2015_275_14_1,Siboney_by_The_Tailor_Maids
2015_275_16_1,Louis_Armstrong_Cant_Give_You_Anything_But_Love
2015_275_17_1,Benny_Goodman_Trio_Nice_Work_Avalon
2015_275_18_1,Feather_On_Jazz_Jazz_In_The_Concert_Hall
2015_235_1_1,Integration_Report_1
2015_273_2_1_1,Cab_Calloway_Home_Movie_1
2015_273_2_2_1,Cab_Calloway_Home_Movie_2
我想,以取代_
用逗号之前的部分.
和_
与空间逗号后的第二部分。
我可以通过以下方式单独完成每个任务:
sed -E -i '' 's/([0-9]{4})_([0-9]{3})_([0-9]{2})_([0-9])/\1.\2.\3.\4./'
对于第一部分,第二部分然后是:
sed -E -i '' "s/_/ /g"
但我希望通过使用 cut 和 sed 以更简单的方式完成它,但这不起作用:
cut -d "," -f 1 foo.txt | sed -E -i '' "s/_/./g" foo.txt && cut -d "," -f 2 foo.txt | sed -E -i '' "s/_/ /g" foo.txt
不好。
那么,有没有办法用sed
或者可能awk
或者其他的东西来完成这个,我把它,
当作分隔符,比如 in cut
?
期望的输出:
2015.275.14.1,Siboney by The Tailor Maids
类似于@CWLiu的答案,但我使用 OFS(输出字段分隔符)而不是在逗号中添加回来,并且必须使用 printf 添加换行符。
awk -F ',' 'BEGIN {OFS = FS} {gsub(/_/, ".", $1); gsub(/_/, " ", $2); print;}' foo.txt
解释:
-F ','
设置字段分隔符
BEGIN {OFS = FS}
将输出字段分隔符(默认空格)设置为等于字段分隔符,以便将逗号打印回
gsub(/_/, ".", $1)
第一列的全局替换
gsub(/_/, " ", $2)
第二列的全局替换
print
打印整行
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句