我有 1 個包含兩列資料的資料檔案“file1.csv”,需要讀取檔案內容并根據第一列字串值“finance & total”和類似的“marketing & total”找出行之間。腳本應查找“財務”和“財務總額”,然后獲取(A、B、D、H)之間的記錄,腳本應查找“營銷”和“營銷總額”,然后獲取(C、E、G)之間的記錄。我不想在 'Finance' 之前和 'Marketing Total' 字串之后獲取記錄。
還需要跳過第 2 個或第 3 個欄位具有 nan 字串的行。
我嘗試了下面的代碼,但沒有得到預期的輸出。
while read line
do
if [[ $line == "finance" ]]; then
echo $line >> output.csv
else
echo ""
fi
done < file1.csv
file1.csv:
Departments Accounts ##Header
Monthwise data ##Sub Header
IT,Amount
P,20
q,30
IT Total,50
Finance,Amount
A,20
B,30
D,60
H,50
Finance Total,160
<Empty space>
Marketing,Amount
C,40
E,10
G,60
Marketing Total,110
HR,amount
X,20
Y,50
Z,10
預期輸出:
department,name,amount
Finance,A,20
Finance,B,30
Finance,D,60
Finance,H,50
Marketing,C,40
Marketing,E,10
Marketing,G,60
預期輸出應存盤在輸出檔案中。
uj5u.com熱心網友回復:
使用您顯示的樣本,請嘗試以下awk程式。簡單的解釋是,將所有行的逗號設定為 FS、OFS,并在 BEGIN 部??分本身列印標題。然后在主程式中,檢查不同的條件并相應地列印值。注意此程式將Marketing Total在根據 OP 的提及找到后退出。
awk '
BEGIN{
FS=OFS=","
print "department,name,amount"
}
/Marketing Total/ { exit }
/Finance Total/ || ($2=="nan" || $3=="nan"){ next }
/Finance,Amount/ || /Marketing,Amount/ { found=1;first=$1;next }
found { print first,$0 }
' Input_file
或者,如果需要將 nan 值作為不區分大小寫進行比較,請嘗試以下代碼。
awk '
BEGIN{
FS=OFS=","
print "department,name,amount"
}
/Marketing Total/ { exit }
/Finance Total/ || (tolower($2)=="nan" || tolower($3)=="nan"){ next }
/Finance,Amount/ || /Marketing,Amount/ { found=1;first=$1;next }
found { print first,$0 }
' Input_file
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/314550.html
