これをどのように表現するのか悩んでいるため、Google-fuは失敗します。
データテーブルを含むテキストファイルがあります。サブグループを視覚的に区別するために改行を挿入したいと思います。
たとえば、次のように起動した場合:
jan ford
jan trillian
mar trillian
sep marvin
最初のフィールドは私のサブグループフィールドなので、出力は次のようになります。
jan ford
jan trillian
mar trillian
sep marvin
同じ月の2行を識別するのと同じことができますが、異なる^(a-z){3}\t(.*)\n\1\t(.*)$
場合はどのように一致させるのかわかりません。
理想的には、これはBBeditに含めることができる正規表現であることを望みますが、他のソリューションも開いています。
ベストアンサー1
bbedit
一種の有料OSXエディタのように見えます。一度も使ったことがないし、インストールもできないので助けができません。表示された正規表現に基づいて独自の正規表現構文があるため、これを使用する一般的な*nixサイトでソリューションを見つける可能性はほとんどありません。しかし、ここには他のオプションがあります。どちらの場合も、最初のフィールドを保存し、前の行で見たものと異なる場合は、空の行を印刷することをお勧めします。
$ awk '{if($1!=last && NR>1){print ""}last=$1;}1;' file
jan ford
jan trillian
mar trillian
sep marvin
awk
フィールドベースのデータを処理するように設計されたスクリプト言語です。自動的に各行をフィールドに分割してから...と呼び出すことができます$1
。したがって、上記のスクリプトは変数の最初のフィールドを保存し、最初の行を除くすべての行(つまりこれが意味するもの)に対して現在保存されている値と異なる場合は空の行を印刷します。awk は「各行印刷」の略です。$2
$N
last
NR>1
last
1;
または、以下でこれを行うことができますperl
。
$ perl -lape '$F[0] ne $last && $.>1 && print ""; $last=$F[0]' file
jan ford
jan trillian
mar trillian
sep marvin
ここでは、perl
コマンドラインスイッチを使用してほとんどのタスクを実行します。 makeは、各入力ラインを配列に分割するのと同様に-a
機能します。最初のフィールドです。各呼び出しに改行文字を追加することで、空行のみが印刷されます。与えられたスクリプトを適用した後、各入力行を印刷するようにします。スクリプト自体は上記のスクリプトとまったく同じです。perl
awk
@F
$F[0]
-l
perl
print
print ""
-p
-e
awk