Shell sciptで複数行の表形式を印刷したいです。

Shell sciptで複数行の表形式を印刷したいです。

sedまたは、同じツールを使用してテーブル形式で入力を印刷したいですawk

入力する:

Line1
Line2
Line3
Line4
Line5
Line6
Line7
Line8

希望の出力:

Line1 Line2 Line3 Line4 
Line5 Line6 Line7 Line8

答え1

グループを区切る空白行がない場合は、4行のグループを印刷します。

$ 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

線の長さが異なる場合

  • これまでに提案された回答の1つから、
  • 必要に応じて列をタブ区切りに変更し(データにタブがないとします)
  • パイプによる出力column -t -s$'\t'

たとえば(スペース区切り文字がないと仮定):

$catfile178492
これ
クイック
茶色
キツネ
飛び越える
これ
怠惰
犬。
$貼り付け - - - - <ファイル178492
アジャイルブラウンキツネ
その怠惰な犬を飛び越えてください。
                    #デフォルトでは、貼り付けはタブで出力列を区切ります。
$貼り付け - - - - < file178492 列 -t -s$'\t'
アジャイルブラウンキツネ
その怠惰な犬を飛び越えてください。
$ awk '{a=a (a?OFS:"") $0} NR>1 && NR%4==0{print a=""}' file178492
アジャイルブラウンキツネ
その怠惰な犬を飛び越えてください。
                    # 指定  -vOFS=$'\t'  awk は出力フィールドをタブで区切ります。
$awk-vOFS=$'\t''{a=a(a?OFS:"") $0} NR>1 && NR%4==0{print a=""}' file178492
アジャイルブラウンキツネ
その怠惰な犬を飛び越えてください。
$ awk -vOFS=$'\t' '{a=a (a?OFS:"") $0} NR>1 && NR%4==0{print a=""}' file178492 |column-t -s $'\t'
アジャイルブラウンキツネ
その怠惰な犬を飛び越えてください。

メモ:

  • $'…'明確に表示され、デバイスに依存しない方法でコマンドに制御文字を入力できるbash構文。  $'\t'タブ文字を指定します。 bashを使用せずに$'\t'機能しない場合は、Tabまたは Ctrl+ V、と入力してくださいTab。 (これがうまくいかない場合は、Ctrl+Iまたは Ctrl+ VCtrl+を試してくださいI。)
  • 列の間により多くのスペースが必要な場合。コマンド-o' 'に追加column
$貼り付け - - - - < file178492 列 -t -s$'\t' -o' '
アジャイルブラウンキツネ
怠惰な犬を飛び越えてください。

答え3

私はあなたが一行にグループ化された部分を印刷したいと思います。このデフォルトのawkスクリプトはそうする必要があります。

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

関連情報