shell高手快进!!CSV行列变换问题!加上打印功能!!!

APOLLO_TS 2008-11-17 11:02:56
13403160309,GSM号码
13403161865,GSM号码
13403162035,GSM号码
13403164759,GSM号码
13403165021,GSM号码
13403164759,GSM号码
13403165021,GSM号码
13404164759,GSM号码
13405165021,GSM号码
13406164759,GSM号码
13407165021,GSM号码
变成如下结构:
13403160309 13403161865 13403162035 13403164759
13403165021 13403164759 13403165021 13404164759
13405165021 13406164759 13407165021

然后送到打印机每三十行一张纸,如果有字体放大功能更好!!记录比较多!!!

真诚求教!!高手赐招!!!!!嫌弃分少可以在加!!

...全文
293 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
APOLLO_TS 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 genghb 的回复:]
要先把前一行保存到一个变量中 然后在下一循环再比较 ()
如果你的服务器挂了打印机,可以使用
lp 文件名
不过我还不会调整字体
[/Quote]
lp命令在终端打印似乎不好弄!!!
APOLLO_TS 2008-11-18
  • 打赏
  • 举报
回复
AWK中读取的当前行,怎么和前一行的记录做比较呢???
genghb 2008-11-18
  • 打赏
  • 举报
回复
要先把前一行保存到一个变量中 然后在下一循环再比较
如果你的服务器挂了打印机,可以使用
lp 文件名
不过我还不会调整字体
APOLLO_TS 2008-11-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 genghb 的回复:]
下面是格式化文件代码

cat 你的原始文件名 | awk -F"," '
{
printf("%s ", $1);
if (NR != 1 && NR % 4 == 0)
{
printf("\n");
}
}
END{
printf("\n");
}
' > 你的原始文件名.new
[/Quote]

感谢解决了格式化问题。
但是打印怎么做呢??
genghb 2008-11-17
  • 打赏
  • 举报
回复
下面是格式化文件代码

cat 你的原始文件名 | awk -F"," '
{
printf("%s ", $1);
if (NR != 1 && NR % 4 == 0)
{
printf("\n");
}
}
END{
printf("\n");
}
' > 你的原始文件名.new
joyself 2008-11-17
  • 打赏
  • 举报
回复
建议先把Linux下的打印先搞起来先。
快乐田伯光 2008-11-17
  • 打赏
  • 举报
回复
gawk -F, '{if (match($2,"GSM")) printf("%s\t", $1); if (NR % 4 == 0) printf("\n");} END {printf("\n")}' b.txt > c.txt

转换前文件:b.txt, 转换后结果文件c.txt.
APOLLO_TS 2008-11-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 genghb 的回复:]
NR != 1确实不需要写,脑子里老想着C的从0开始,顺手就多加了一个条件

打印需要看设备和纸张,不是简单的shell就可以解决的,一般需要根据设备与纸张调试n次才能正确输出

可以考虑在windows下打印
[/Quote]
你那个NR!=1 对我也有用!!只是在屏蔽标题行的时候!!嘎嘎!!

没8法啊!!不是window系统


!!
genghb 2008-11-17
  • 打赏
  • 举报
回复
NR != 1确实不需要写,脑子里老想着C的从0开始,顺手就多加了一个条件

打印需要看设备和纸张,不是简单的shell就可以解决的,一般需要根据设备与纸张调试n次才能正确输出

可以考虑在windows下打印
APOLLO_TS 2008-11-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 joyself 的回复:]
引用 2 楼 APOLLO_TS 的回复:
引用 1 楼 genghb 的回复:
下面是格式化文件代码

cat 你的原始文件名 | awk -F"," '
{
printf("%s ", $1);
if (NR != 1 && NR % 4 == 0)
{
printf("\n");
}
}
END{
printf("\n");
}
' > 你的原始文件名.new


感谢解决了格式化问题。
但是打印怎么做呢??


打印应该不属于shell管的,你可以用打印命令,或者找个可以打印的编辑程序。
对于用命令指定字…
[/Quote]
打印应该不属于shell管的!!!!不会吧!!!我也对此知之甚少!
joyself 2008-11-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 APOLLO_TS 的回复:]
引用 1 楼 genghb 的回复:
下面是格式化文件代码

cat 你的原始文件名 | awk -F"," '
{
printf("%s ", $1);
if (NR != 1 && NR % 4 == 0)
{
printf("\n");
}
}
END{
printf("\n");
}
' > 你的原始文件名.new


感谢解决了格式化问题。
但是打印怎么做呢??
[/Quote]

打印应该不属于shell管的,你可以用打印命令,或者找个可以打印的编辑程序。
对于用命令指定字体大小的具体操作不熟,不做评论。
joyself 2008-11-17
  • 打赏
  • 举报
回复
楼上的方法ok。

我觉得NR != 1没有必须判断吧。

命令行:
cat test.txt | awk -F, ' { printf("%s ", $1); if (NR % 4 == 0) printf("\n");} END {printf("\n")} '

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧