如何从unix中的.dat文件中读取每一行?

时间:2009-08-24 07:42:39

标签: linux unix

trade.dat是我的文件,由数据行组成。

我必须用逗号(,)

连接该文件的每一行 请帮助我

6 个答案:

答案 0 :(得分:7)

如果您的意思是在每行的末尾添加一个逗号:

sed 's/$/,/' <oldfile >newfile

如果您的意思是将所有行连接成一行,请用逗号分隔:

awk '{printf "%s,",$0}' <oldfile >newfile

或者更正确的一个没有尾随逗号(感谢,@ hacker,指出错误):

awk 'BEGIN {s=""} {printf "%s%s",s,$0;s=","}' <oldfile >newfile

如果您想要shell变量中任何一个的输出,只需使用$()构造,例如:

str=$(awk 'BEGIN {s=""} {printf "%s%s",s,$0;s=","}' <oldfile)

我发现最好使用$()而不是反引号,因为它允许我嵌套命令,反引号不能做。

答案 1 :(得分:2)

两个强制性perl版本(第二个版本归功于William Pursell):

perl -i -p -e 'chomp($_); $_ = "$_,\n"' trade.dat

perl -i -p -e 's/$/,/' trade.dat

请注意

  • 默认情况下不会备份原始文件(使用-i.bak)。
  • 这个答案在每一行都附加一个逗号。要将所有行合并为一行(以逗号分隔),请查看William Purcell's answer

答案 2 :(得分:1)

尝试

fullline=""
for line in $(cat trade.dat)
do
         fullline="$fullline,$line"
done
然后使用$ full line显示连接的文件

希望这会有所帮助; p

答案 3 :(得分:1)

perl -pe 's/\n/,/ unless eof'

答案 4 :(得分:0)

首先出现在我的脑海中:

  

gawk -- '{ if(a) { printf ",%s",$0; } else { printf "%s",$0; a=1 } }' trade.dat

如果我正确理解你想要的东西。

答案 5 :(得分:0)

回答标题中的问题,在BASH循环中获取变量中每一行的一种方法是:

cat file.dat | while read line; do echo -n "$line",; done

这将留下一个尾随逗号,但显示如何阅读每一行。

但很明显,sed或awk或perl解决方案最适合您问题正文中描述的问题。