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+ V、Ctrl+を試してくださいI。)- 列の間により多くのスペースが必要な場合。コマンド
-o' '
に追加column
:
$貼り付け - - - - < file178492 列 -t -s$'\t' -o' ' アジャイルブラウンキツネ 怠惰な犬を飛び越えてください。
答え3
私はあなたが一行にグループ化された部分を印刷したいと思います。このデフォルトのawkスクリプトはそうする必要があります。
awk 'BEGIN{RS=""}{gsub("\n"," ");print}' test.txt