如何用awk等简洁方式实现短行作键长行作值的CSV转换
使用AWK简化文本转CSV格式的实现
现有如下格式的文本文件:
729590 fbe2d8c9-5b33-4758-8668-7e9f9f70085b 326e9ee4-da56-44de-ad40-e42f14dbf6c4 459590 d43bcb29-7c91-411c-ad5a-7450a927d2df 865431 f719b802-a7bd-4b83-aa02-08e3d3f351ff 8fcb6aed-9c87-4c0d-af94-9200830c4e27 c56378e8-fb14-4cd4-b816-020b328fb50a 345621 9fd92086-e681-4458-9631-cfa02d349fee 16cf1a8d-3fd8-49a3-b9fd-445a1413d280 07f31e67-07a4-4088-8cdd-9354d26cbd70 d6af1a35-563e-4e51-8533-0ec0a39d26fa e7ae32e8-3658-400b-ab95-5107bedb6f34
需要转换为以下CSV格式:
729590,fbe2d8c9-5b33-4758-8668-7e9f9f70085b,some_text 729590,326e9ee4-da56-44de-ad40-e42f14dbf6c4,some_text 459590,d43bcb29-7c91-411c-ad5a-7450a927d2df,some_text 865431,f719b802-a7bd-4b83-aa02-08e3d3f351ff,some_text 865431,8fcb6aed-9c87-4c0d-af94-9200830c4e27,some_text 865431,c56378e8-fb14-4cd4-b816-020b328fb50a,some_text 345621,9fd92086-e681-4458-9631-cfa02d349fee,some_text 345621,16cf1a8d-3fd8-49a3-b9fd-445a1413d280,some_text 345621,07f31e67-07a4-4088-8cdd-9354d26cbd70,some_text 345621,d6af1a35-563e-4e51-8533-0ec0a39d26fa,some_text 345621,e7ae32e8-3658-400b-ab95-5107bedb6f34,some_text
AWK实现方案
可以用一行AWK命令完成转换,比while循环更简洁:
awk '/^[0-9]+$/ {id=$0; next} {print id "," $0 ",some_text"}' input.txt > output.csv
逻辑说明
/^[0-9]+$/ {id=$0; next}:匹配纯数字的行(也就是ID行),将该行内容存入变量id,然后跳过当前行的后续处理,直接读取下一行。{print id "," $0 ",some_text"}:处理非数字行(UUID行),输出ID,UUID,some_text的CSV格式。
内容的提问来源于stack exchange,提问作者Himanshu Jaiswal
相关产品推荐
相关产品推荐

