You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取账单文本首列、中间内容与末列并导出为CSV?

解决方案

方法一:用awk实现你要的分隔格式

直接运行以下awk命令,就能生成你期望的带|分隔的账单格式:

{
    date = $1
    sub(/^[^ ]+ /, "", $0)
    if ($NF == "Cr") {
        amount = $(NF-1)
        remark = $NF
        sub(/ [^ ]+ Cr$/, "", $0)
    } else {
        amount = $NF
        remark = ""
        sub(/ [^ ]+$/, "", $0)
    }
    printf("%s | %s | %s | %s\n", date, $0, amount, remark)
}

执行方式:把代码保存为format_bill.awk,然后运行 awk -f format_bill.awk test.txt,或者直接用一行命令:

awk '{date=$1;sub(/^[^ ]+ /,"",$0);if($NF=="Cr"){amount=$(NF-1);remark=$NF;sub(/ [^ ]+ Cr$/,"",$0)}else{amount=$NF;remark="";sub(/ [^ ]+$/,"",$0)}printf("%s | %s | %s | %s\n",date,$0,amount,remark)}' test.txt

方法二:直接生成CSV格式(方便导入电子表格)

如果要导出为CSV,只需调整输出格式,给描述字段加引号(避免电子表格解析错误):

{
    date = $1
    sub(/^[^ ]+ /, "", $0)
    if ($NF == "Cr") {
        amount = $(NF-1)
        remark = $NF
        sub(/ [^ ]+ Cr$/, "", $0)
    } else {
        amount = $NF
        remark = ""
        sub(/ [^ ]+$/, "", $0)
    }
    printf("\"%s\",\"%s\",\"%s\",\"%s\"\n", date, $0, amount, remark)
}

执行后将结果保存为CSV文件:

awk '{date=$1;sub(/^[^ ]+ /,"",$0);if($NF=="Cr"){amount=$(NF-1);remark=$NF;sub(/ [^ ]+ Cr$/,"",$0)}else{amount=$NF;remark="";sub(/ [^ ]+$/,"",$0)}printf("\"%s\",\"%s\",\"%s\",\"%s\"\n",date,$0,amount,remark)}' test.txt > bill.csv

补充:基于你已尝试的cut命令整合方案

如果你想用自己之前的cut命令实现,可以结合paste命令拼接各部分:

paste -d '|' \
<(cut -d ' ' -f1 test.txt) \
<(cut -d ' ' -f2- test.txt | rev | cut -d ' ' -f2- | rev) \
<(awk '{if ($NF == "Cr") print $(NF-1) "|Cr"; else print $NF "|"}' test.txt)

内容的提问来源于stack exchange,提问作者shantanuo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 20:15:08