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'
它对您不起作用,请尝试只输入Tab或 Ctrl+ V, Tab。(如果这些不起作用,请尝试Ctrl+I或 Ctrl+ V, Ctrl+ I。)- 如果您希望各列之间有更多空间。添加
-o' '
到column
命令:
$ 粘贴 - - - - < file178492 |列 -t -s$'\t' -o' ' 敏捷的棕色狐狸 跳过了那只懒狗。
答案3
我猜您只是想在一行上打印分组的部分,这个基本的 awk 脚本应该可以做到这一点。
awk 'BEGIN{RS=""}{gsub("\n"," ");print}' test.txt