Awk 如何将包含一行逗号分隔文本的文本文件转换为包含新行上每个逗号分隔字段的文件

Awk 如何将包含一行逗号分隔文本的文本文件转换为包含新行上每个逗号分隔字段的文件,awk,solaris,Awk,Solaris,我正在使用旧的Sun Solaris 2.5.1。我有几个文件,其中有l行逗号分隔的数据字段,我需要将它们转换为新行上的每个字段。每个文件中有不同数量的字段 i、 e 需要: #cat recipe1 299834 43399 PRODUCT NAME HERE 4.02 344 MORE TEXT HERE 3423 etc... 你的意思是把逗号转换成换行符 sed's/,/\n/g'in.txt>out.txt 看起来旧Solaris没有特殊的\n序列。尝试使用真正的换行符: sed '

我正在使用旧的Sun Solaris 2.5.1。我有几个文件,其中有l行逗号分隔的数据字段,我需要将它们转换为新行上的每个字段。每个文件中有不同数量的字段

i、 e

需要:

#cat recipe1
299834
43399
PRODUCT NAME HERE
4.02
344
MORE TEXT HERE
3423
etc...

你的意思是把逗号转换成换行符

sed's/,/\n/g'in.txt>out.txt

看起来旧Solaris没有特殊的\n序列。尝试使用真正的换行符:

sed 's/,/\
/g' in.txt > out.txt
编辑:更新为添加反斜杠,如@Ed Morton所建议的可能:

tr ',' '\r' < in > out
tr',''\r'out

您可以使用此
awk

awk '$1=$1' RS=, recipe1
但如果文件中有
0
,则会失败,因此最好使用:

awk '{$1=$1}1' RS=, recipe1
299834
43399
PRODUCT NAME HERE
4.02
344
MORE TEXT HERE
3423

PS:此命令将执行就地替换。因此,无需将输出重定向到新文件。退出的文件本身将被修改。

是-这就是我想要的。当我输入建议的字符串时,我得到的逗号被“n”取代,而不是新行…更新了我的答案,因为我无法在注释中正确获得格式。在sed中获得新行的可移植方法是反斜杠,后跟文字换行符,就像你的第二个脚本一样,但是在第一行末尾有一个反斜杠。是的!事实上,正如它的Mejodie所建议的那样,这是“\n”,所以感谢你们两位。我现在终于可以回家了-希望我明天能把剩下的事情做完,称之为一周…澄清一下,它是:tr',''\n'outfile
awk '{$1=$1}1' RS=, recipe1
299834
43399
PRODUCT NAME HERE
4.02
344
MORE TEXT HERE
3423
perl -pi -e 's/,/\n/g' your_file