SED& AWK在一行文件中打印条目

时间:2014-04-07 17:10:38

标签: linux sed awk

我从脚本命令的输出中获得了大量用户名。它们一个接一个地列出,我想在一行中一次打印5个

我的输入是

eli
mo
joes
hope
tom
bob
smith
etc 
etc 
oinky

我希望输出看起来像这样

eli, mo, joes, hope, tom
bob, smith, etc, etc, oinky

你能帮帮忙吗?

干杯

6 个答案:

答案 0 :(得分:2)

使用awk:

awk '{if (NR%5 != 0) {printf $1", "} else {printf $1"\n"}}' file

更加笨拙的方式,感谢@JS웃

awk 'NR%5{printf "%s, ",$0;next}1' file

或者来自@Jotne的这个,我觉得很好:

awk '{printf "%s"(NR%5?", ":"\n"),$1}' file
  • NR:是记录数,基本上是正在读取的行数
  • %正在给你剩下的部门

所以:

每5行,打印文件的第一列($ 1,如果你想要所有列,则为$ 0)并创建新行,否则写第一列和逗号。

(文件是您输入的文件)

它给出了:

eli, mo, joes, hope, tom
bob, smith, etc, etc, oinky

希望这会有所帮助

答案 1 :(得分:2)

your_command | paste - - - - - | sed 's/\t/, /g'

答案 2 :(得分:2)

$ cat f
eli
mo
joes
hope
tom
bob
smith
etc 
etc 
oinky

最简单的方法

$ awk 'ORS = !(NR%5)? RS : OFS' OFS=','  f
eli,mo,joes,hope,tom
bob,smith,etc ,etc ,oinky

$ awk '{$1 = $1} ORS = !(NR%5)? RS : OFS' OFS=', '  f
eli, mo, joes, hope, tom
bob, smith, etc, etc, oinky

答案 3 :(得分:1)

xargs -n 5 < yourfile | tr ' ' ','

答案 4 :(得分:1)

假设您的命令是 cat fileName.txt ,它会为您提供以下输出:

eli
mo
joes
hope
tom
bob
smith
etc 
etc 
oinky

所以请使用 xargs 命令,如下所示

  
    

cat fileName.txt | xargs -n 5 | sed -e's / /,/ g'

         eli,mo,joes,hope,tom

         鲍勃,史密斯等等,oinky

  

获得所需的输出

答案 5 :(得分:1)

以下是我使用awk

的方法
awk '{printf "%s"(NR%5?", ":"\n"),$1}' file
eli, mo, joes, hope, tom
bob, smith, etc, etc, oinky