想要在shell scipt中打印多行表格格式

想要在shell scipt中打印多行表格格式

sed我想使用或等工具以表格格式打印输入awk

输入:

Line1
Line2
Line3
Line4
Line5
Line6
Line7
Line8

期望的输出:

Line1 Line2 Line3 Line4 
Line5 Line6 Line7 Line8

答案1

如果没有空行分隔组,则打印四行组:

$ awk '{a=a (length(a)?OFS:"") $0} NR>1 && NR%4==0{print a; a=""}' file
Line1 Line2 Line3 Line4
Line5 Line6 Line7 Line8

如果有空行分隔要打印的行组(例如之前的修订版), 然后:

$ cat file
Line1
Line2
Line3
Line4

Line5
Line6
Line7
Line8
$ awk '{a=a (length(a)?OFS:"") $0} !length($0){print a; a=""} END{print a}' file
Line1 Line2 Line3 Line4 
Line5 Line6 Line7 Line8

答案2

如果线的长度不一样,

  • 从迄今为止提出的答案之一开始,
  • 根据需要修改它,以用制表符分隔列(这假设数据中没有制表符),并且
  • 通过管道输出column -t -s$'\t'

例如(假设没有空白分隔线):

$猫文件178492
快的
棕色的
狐狸
跳过
懒惰的
狗。
$ 粘贴 - - - - < file178492
敏捷的棕色狐狸
跳过那只懒狗。
                    # 默认情况下,粘贴用制表符分隔输出列。
$ 粘贴 - - - - < file178492 |列-t -s$'\t'
敏捷的棕色狐狸
跳过那只懒狗。
$ awk '{a=a (a?OFS:"") $0} NR>1 && NR%4==0{print a; a=""}' file178492
敏捷的棕色狐狸
跳过那只懒狗。
                    # 指定  -vOFS=$'\t'  awk 用制表符分隔输出字段。
$ awk-vOFS=$'\t''{a=a(a?OFS:"") $0} NR>1 && NR%4==0{print a; a=""}' file178492
敏捷的棕色狐狸
跳过那只懒狗。
$ awk -vOFS=$'\t' '{a=a (a?OFS:"") $0} NR>1 && NR%4==0{打印 a; a=""}' file178492 |列-t -s$'\t'
敏捷的棕色狐狸
跳过那只懒狗。

笔记:

  • $'…'是一种 bash 语法,它允许您以明确可见且与设备无关的方式在命令中输入控制字符。  $'\t'指定制表符。如果您没有使用 bash,并且$'\t'它对您不起作用,请尝试只输入TabCtrl+ V, Tab。(如果这些不起作用,请尝试Ctrl+ICtrl+ V, Ctrl+ I。)
  • 如果您希望各列之间有更多空间。添加-o' 'column命令:
$ 粘贴 - - - - < file178492 |列 -t -s$'\t' -o' '
敏捷的棕色狐狸
跳过了那只懒狗。

答案3

我猜您只是想在一行上打印分组的部分,这个基本的 awk 脚本应该可以做到这一点。

awk 'BEGIN{RS=""}{gsub("\n"," ");print}' test.txt

相关内容