空行で区切られたフィールドデータを使用して複数のtxtをCSVに変換する方法

空行で区切られたフィールドデータを使用して複数のtxtをCSVに変換する方法

フィールドが空白行で区切られた複数のテキストファイルにいくつかのデータがあります。フィールドは4つだけですが、2番目のフィールドにはより多くのサブフィールドがあります。たぶん3つ以上になるかもしれません。最初のフィールドは常に数値、0または1です。

0
name_surname
1 yellow 1 brown 2 green
 short description

すべてのファイルは同じ方法で作成されます。問題は、3番目のフィールドに多くまたは少ない色を持つことができることです。

各txtはcsvファイルの1行にする必要があります。

0 [tab] name_surname [tab] 1 yellow ; 1 brown; 2 green [tab] "description"
1 [tab] name2_surname [tab] 1 brown; 1 blue [tab] "description"

ちょっと読んだ後は何とかawkを使うべきだと思いましたが、それは私の能力の外でした。

ベストアンサー1

私は使用方法を知っていますsed

#!/bin/sed -nf
# Read second line & save first two lines to hold
N; h
# Read third line and perform transform
n; s/\([0-9]\+ [a-zA-Z]\+\) /\1; /g
# Append it to hold
H
# Give hold back
g
# Read fourth line
N
# Transform newlines
s/\n/\t/g
# Print result
p

または1行で:

sed -n 'N;h;n;s/\([0-9]\+ [a-zA-Z]\+\) /\1; /g;H;g;N;s/\n/\t/g;p' data.txt

おすすめ記事