複数のファイルがあり、すべて同じデータパターンに従います。
これが私が抽出したいパターンであるとしましょう。
First part of text...patternA......Second part of text.....patternB.....Third part of text....patternC.....End part of text
現在私はこれを使用しています:
grep -P -o ".{0,5}patternA|.{0,5}patternB.{0,5}|patternC.{0,5}" filename.txt
私が得た結果は次のとおりです。
1111 patternA
2222 patternB 2222
patternC 3333
私が本当に望む結果は次のとおりです。
1111 patternA 2222 patternB 2222 patternC 3333
各パターンの末尾にある改行文字を削除する方法がわからないようです。
どうすればいいですか?
答え1
3つのフィールドがすべて常に存在することがわかっている場合は、「貼り付け」を使用して次のことを試すことができます。
grep -P -o ".{0,5}patternA|.{0,5}patternB.{0,5}|patternC.{0,5}" filename.txt | paste - - -
答え2
sed
キャプチャグループを使用して、パターンに一致するライン部分を出力にコピーするために使用されます。
sed -r -n 's/.*(.{0,5}patternA).*(.{0,5}patternB.{0,5}).*(patternC.{0,5}).*/\1 \2 \3/p' filename.txt
これは、線のパターンが常にこの順序であると仮定します。
答え3
そしてcolumn
:
COLUMN(1) BSD General Commands Manual COLUMN(1)
NAME
column -- columnate lists
SYNOPSIS
column [-tx] [-c columns] [-s sep] [file ...]
DESCRIPTION
The column utility formats its input into multiple columns. Rows are
filled before columns. Input is taken from file operands, or, by
default, from the standard input. Empty lines are ignored.
たとえば、(出力をパイプできることを無料で使用してcat
デモンストレーション):grep
column
$ cat example
Fuzzy
wuzzy
was
a
bear
$ cat example | column
Fuzzy wuzzy was a bear