2017-09-16 22 views
0

想要考慮該行,如果第二列($2=="")爲空,則打印值爲$1和其餘行,直到下一個第二列爲空($2=="")。 這時需要delete所有的行,其中第二欄是空的($2=="")awk從先前值填充然後刪除

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 

output.csv

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 

我試圖像下面的命令沒有成功...

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編寫的第4版Effective Awk Programming。 –

+0

您正在考慮向後(即負面)。不要考慮你需要刪除什麼,想想你需要打印什麼。現在再看一遍,看看它是否更有意義。 –

+1

埃德莫頓,感謝一噸,接受和投票! – 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,確定,看到我的更新 – RomanPerekhrest

+0

RomanPerekhrest,謝謝你,投票贊成! – VNA