2

ヘッダーレコードの後に​​詳細行が続くファイルがあります。awkを使用して、ヘッダーの単語をファイル内の後続の行にタグ付けしたいと思います。各ヘッダーレコードには、特定の単語「header」が含まれています。

私のサンプルファイルは

h1_val  header
this is line 1 under header set1
this is line 2 under header set1
this is line 3 under header set1
this is line 4 under header set1
h2_val  header
this is line 1 under header set2
this is line 2 under header set2
this is line 3 under header set2
this is line 4 under header set2

私の出力は次のようになります

h1_val this is line 1 under header set1
h1_val this is line 2 under header set1
h1_val this is line 3 under header set1
h1_val this is line 4 under header set1
h2_val this is line 1 under header set2
h2_val this is line 2 under header set2
h2_val this is line 3 under header set2
h2_val this is line 4 under header set2

助けてください

ありがとう!!!

ghotiに感謝します。行がプレーンであれば、正常に機能しているようです。入力がコンマで区切られ、二重引用符で囲まれているように見える場合...awkはどのようなバリエーションである必要がありますか

"h1_val","header word" 
"this is line 1","under header","set1" 
"this is line 2","under header","set1" 
"this is line 2","under header","set1" 
"this is line 2","under header","set1" 
"h2_val","header word" 
"this is line 1","under header","set2" 
"this is line 2","under header","set2" 
"this is line 2","under header","set2" 
"this is line 2","under header","set2" 

ありがとう!!

4

2 に答える 2

3

これはそれをするようです。

$ awk '$2=="header"{h=$1;next} {printf("%s ",h)} 1' input.txt
h1_val this is line 1 under header set1
h1_val this is line 2 under header set1
h1_val this is line 3 under header set1
h1_val this is line 4 under header set1
h2_val this is line 1 under header set2
h2_val this is line 2 under header set2
h2_val this is line 3 under header set2
h2_val this is line 4 under header set2

または、必要に応じて、これはほぼ機能的に同等です。

$ awk '$2=="header"{h=$1;next} {print h OFS $0}' input.txt

これらは、ヘッダーテキストにスペースがないことを意味することに注意してください。$2=="header"もしそうなら、あなたはあなたのヘッダーを見つけるよりももっと凝ったことをする必要があるかもしれません。その場合は、質問をより詳細に更新してください。

于 2012-07-11T02:55:53.897 に答える
2
> awk '{if($2=="header")p=$1;else print p,$0}' temp2
h1_val this is line 1 under header set1
h1_val this is line 2 under header set1
h1_val this is line 3 under header set1
h1_val this is line 4 under header set1
h2_val this is line 1 under header set2
h2_val this is line 2 under header set2
h2_val this is line 3 under header set2
h2_val this is line 4 under header set2
于 2012-07-11T05:36:54.037 に答える