想要考慮該行,如果第二列($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
你已經提出了足夠多的問題並得到了足夠的答案,並且通常足夠使用awk,我無法想象需要在答案中解釋什麼,但是如果你有特定問題,請告訴我。如果你真的只是不理解邏輯,我建議你開始閱讀Arnold Robbins編寫的第4版Effective Awk Programming。 –
您正在考慮向後(即負面)。不要考慮你需要刪除什麼,想想你需要打印什麼。現在再看一遍,看看它是否更有意義。 –
埃德莫頓,感謝一噸,接受和投票! – VNA