3

現在、Unix でテキストを操作するタスクに取り組んでいますが、どうすればよいかわかりません。私はsedを使用する予定です。これは私がやろうとしているワットです。

私はこのテキストを持っています。

BS111

xxxxx
yyyyy
zzzzz

BS112

xxxxx
yyyyy
zzzzz

BS113

xxxxx
yyyyy
zzzzz

so on.. with this kind of format

そして、私はそれが次のようになりたい:

BS111 xxxxx
BS111 yyyyy
BS111 zzzzz



BS112 xxxxx
BS112 yyyyy
BS112 zzzzz



BS113 xxxxx
BS113 yyyyy
BS113 zzzzz

so on.. with this kind of format

BS* とそのデータはほぼ 100 回発生します。そのため、スクリプトを使用するのが最善の方法だと思います。よろしくお願いします。

4

4 に答える 4

2

試すawk

awk '/^BS/{i=$0; next;} {if(length($0)) printf("%s ",i); print $0}' <filename>

アップデート:

'/^BS/{i=$0; 次;} {if(長さ($0)) printf("%s ",i); print $0}' remember は、awk では{...}一連のアクションを示します。/pattern/{...}パターンが見つかった場合、{...}アクションを実行することを意味します。 /^BS[0-9]/各行でパターンを検索します。パターンが見つかった場合、i(awk の変数) はパターン ($0 は完全な行) で更新され、nextすぐに次の行に移動します。したがって、パターンが見つかった場合、次の一連のアクションは{if(...}スキップされます。したがってi、常に最後のパターン値が含まれ、i を更新する場合を除き、行にパターンが含まれている場合、その行に対して次の一連のアクションは実行されません。

次の一連のアクションは、if(length($0))行にテキストが含まれている場合、printf("%s ",i); print the last found pattern, And thenprint $0 prints the original line. So for an empty line, only an empty line is printed, if some text is there, first thei orlast found pattern` が出力され、元の行が出力されることです。ところで、スプートニクのソリューションも同じことを行っていますが、よりコンパクトな形式でのみです。したがって、楽しみのためにそれを分析することもできます。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-05-07T09:05:49.163 に答える