2017-09-16 18 views
0

2番目の列($2=="")がヌルの場合は、$1という値を出力し、次の2番目の列がnullの場合は($2=="")と出力します。 はその後deleteに2番目の列は、私は成功せず、コマンド以下のように試してみましたawkが前回の値から塗りつぶした後に

Name,Subject,Marks,Desc,Details 
Adam,English,10,xxx,xxx 
Adam,Maths,20,yyy,yyy 
Benn,English,10,xxx,xxx 
Benn,Maths,20,yyy,yyy 
Benn,Science,30,zzz,zzz 
Zak,English,10,xxx,xxx 
Zak,Maths,20,yyy,yyy 

output.csv ($2=="")

file.csvになり

Name_Subject,Marks,Desc,Details 
Adam,,, 
English,10,xxx,xxx 
Maths,20,yyy,yyy 
Benn,,, 
English,10,xxx,xxx 
Maths,20,yyy,yyy 
Science,30,zzz,zzz 
Zak,,, 
English,10,xxx,xxx 
Maths,20,yyy,yyy 

空であるすべての行...

が必要
awk -F, 'NR==1{print; next} {if($2 == ""){$2=A}} {A=$2} 1' file.csv 

編集#1

実際のファイルには、行の一部がデータの間に空白の一部が含まれています。このインスタンスでは、空の値を埋めていますが、前の空でない値を取り込むのが好きです。

file.csvになり

Name_Subject,Marks,Desc,Details 
Adam,,, 
English,10,xxx,xxx 
Maths,20,yyy,yyy 
Benn,,, 
English,10,xxx,xxx 
Maths,20,yyy,yyy 
Science,30,zzz,zzz 
,,, 
,,, 
History,40,zzz,zzz 
Zak,,, 
English,10,xxx,xxx 
Maths,20,yyy,yyy 

出力#1

Name,Subject,Marks,Desc,Details 
Adam,English,10,xxx,xxx 
Adam,Maths,20,yyy,yyy 
Benn,English,10,xxx,xxx 
Benn,Maths,20,yyy,yyy 
Benn,Science,30,zzz,zzz 
,History,40,zzz,zzz 
Zak,English,10,xxx,xxx 
Zak,Maths,20,yyy,yyy 

答えて

1
$ awk ' 
    BEGIN { FS=OFS="," } 
    NR==1 { split($1,f,/_/); name=f[1]; $1=f[2] } 
    $2=="" { name=$1; next } 
    { print name, $0 } 
' file 
Name,Subject,Marks,Desc,Details 
Adam,English,10,xxx,xxx 
Adam,Maths,20,yyy,yyy 
Benn,English,10,xxx,xxx 
Benn,Maths,20,yyy,yyy 
Benn,Science,30,zzz,zzz 
Zak,English,10,xxx,xxx 
Zak,Maths,20,yyy,yyy 
+0

あなたは十分な質問をして十分な答えを得て、一般的にawkを使って私の答えに説明が必要だとは思えませんでしたが、特定の質問がある場合は教えてください。論理を全く理解できない場合は、Arnold Robbinsの「Effective Awk Programming」第4版を読むことをお勧めします。 –

+0

あなたはそれを後方に(つまり否定的に)考えています。あなたが削除する必要があるものについて考えないで、印刷する必要があるものについて考える。今度はそれをもう一度見て、それがより理にかなっているかどうかを見てください。 –

+1

Ed Morton、Thanks a ton、Accepted and Up-Voted !!! – VNA

1

ショートawkのアプローチ:

awk -F, 'NR==1;$1==""{next}NR>1 && $2==""{ f=$1; next }f{ print f,$0 }' OFS=',' file 

出力:

Name_Subject,Marks,Desc,Details 
Adam,English,10,xxx,xxx 
Adam,Maths,20,yyy,yyy 
Benn,English,10,xxx,xxx 
Benn,Maths,20,yyy,yyy 
Benn,Science,30,zzz,zzz 
Benn,History,40,zzz,zzz 
Zak,English,10,xxx,xxx 
Zak,Maths,20,yyy,yyy 
+0

RomanPerekhrest、あなたのサポートのためにお世話になりました。実際のファイルでコマンドを実行すると、行全体が空であることがわかりましたので、編集#1を参照して親切に助言してください – VNA

+0

@AVN、ok 、私の更新を参照してください – RomanPerekhrest

+0

RomanPerekhrest、ありがとう、アップ投票! – VNA

関連する問題