sed
出力をパイプし、下のアダプタ名を削除し、sed
値をカンマにグループ化したいと思います。
ent13: 16 3979 ent12: 211 411 3978 ent11: 15 3977 ent10: 111 178 179 311 511 1719 3976
答え1
スペースをコンマで置き換え、コロンの前の単語を削除し、先頭のスペースを削除し、スペースの前のカンマを削除します。
sed 's/ /,/g; s/[^,]*:,/ /g;s/^ //;s/, / /g'
出力:
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
答え2
sed
最初に埋め込まれたパターンを削除してent
から、ギャップを緩め、次に置き換えること,
ができます。
sed 's/ent[0-9][0-9]: //g; s/ /,/g'
答え3
GNUを使用するawk
かmawk
(で正規表現をサポートRS
):
$ mawk -v RS='ent[0-9][0-9]: ' -v ORS=' ' -v FS=' ' -v OFS=',' '
$1 != "" { $1=$1; print }
END { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
または等しく、
$ mawk 'BEGIN { RS="ent[0-9][0-9]: "; ORS=FS=" "; OFS="," }
$1 != "" { $1=$1; print }
END { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
entNN:
これは、単一の行を(ここで数字は)区切りN
のレコードセットとして扱います。各レコードは、スペースで区切られたフィールドのセットとして読み取られます。
テスト$1 != ""
は最初の空のレコード(最初のレコード区切り文字の前に何もありません)をスキップし、ブロックは出力用のレコードを再フォーマットするために次のことを行います$1=$1
。これにより、awk
指定ORS
された合計値を使用してフォーマットOFS
が再割り当てされます。
答え4
「コンマで値をグループ化する」とは、「各アダプタの番号を他のアダプタの番号とカンマで区切る」という意味ですか?それから試してみてください。
sed 's/ *ent[0-9][0-9]: /, /g; s/^, //g' file
16 3979, 211 411 3978, 15 3977, 111 178 179 311 511 1719 3976