我有一个包含一行中所有记录的平面文件,因为文件中没有换行符。例如: 姓名,年龄,乐队,地址,姓名,年龄,乐队,地址,姓名,年龄,乐队,地址 理想情况下,它们应该是3条记录,但它们都被我的ETL工具读作单个记录。我在网站上发现了一些与我的问题类似的问题并得到了解决方案:
sed 's/\([^,]*,[^,]*\),/\1\n/g'1)
我还没有尝试过但是,我会在 sed' s / 之后不理解任何事情。有人可以在' s / 之后了解每个角色。
并且如果有人有任何其他解决方案来获取这一长列的列,这些列被读作单个记录被分割成行。
谢谢,
Rajni
答案 0 :(得分:1)
假设您的文件名为input.txt
,您可以尝试以下内容:
xargs -a input.txt -n4 -d"," printf "%s,%s,%s,%s\n"
答案 1 :(得分:0)
假设问题中的尾随1)
是拼写错误,
sed 's/\([^,]*,[^,]*\),/\1\n/g'
将用换行符替换每一秒逗号(如果你有替换字符串中的\n
的sed;并非所有实现都这样做)。 \(
和\)
分别开始和结束一个组。 [^,]*
匹配最长的非逗号字符串,,
匹配单个逗号。 /
是一个分隔符,因此s
命令全局替换模式中所有出现的模式(两个字符串用逗号分隔)和换行符。
这显然不是你想要的。要用换行替换每一行的第四个逗号,你可以(使用gnu sed):
sed -n ':a; s/,/\n/4; t b; :b; {P; D}; b a;'
有更好的方法(例如,perl)可以做到这一点,但由于问题的目的似乎是了解sed而不是实际过滤数据,这是一个有趣的解决方案。