Sample.csv数据
"2-Keyw-Bllist, TerrorViolencetest",vodka,ZETA+GLOBAL 4(ID: ZETA+GLOBAL),,105629,523,flag
"2-Keyw-Bllist, TerrorViolencetest",vodka,Captify (ID: Captify),,94676,884,flag
"2-Keyw-Bllist, TerrorViolencetest",vodka,QuantCast (ID: QuantCast),,46485,786,flag
TerrorViolencetest,germany,QuantCast (ID: QuantCast),,31054,491,flag
EY-Keyword-Blacklist,BBQ,MIQ+RON (ID: MIQ+RON),,26073,149,flag
TerrorViolencetest,chips,Captify (ID: Captify),,23737,553,flag
"2-Keyw-Bllist, TerrorViolencetest",bacon,QuantCast (ID: QuantCast),,17461,241,flag
VurityAdult-1test,cracks,Captify (ID: Captify),,17325,358,flag
VurityAdult-1test,pizza+grills,Captify (ID: Captify),,15173,41,flag期望输出
"2-Keyw-Bllist, TerrorViolencetest",vodka,ZETA+GLOBAL (ID: ZETA+GLOBAL),105629,523,flag
"2-Keyw-Bllist, TerrorViolencetest",vodka,Captify (ID: Captify),94676,884,flag
"2-Keyw-Bllist, TerrorViolencetest",vodka,QuantCast (ID: QuantCast),46485,786,flag
TerrorViolencetest,germany,QuantCast (ID: QuantCast),31054,491,flag
EY-Keyword-Blacklist,BBQ,MIQ+RON (ID: MIQ+RON),26073,149,flag
TerrorViolencetest,chips,Captify (ID: Captify),23737,553,flag
"2-Keyw-Bllist, TerrorViolencetest",bacon,QuantCast (ID: QuantCast),17461,241,flag
VurityAdult-1test,cracks,Captify (ID: Captify),17325,358,flag
VurityAdult-1test,pizza+grills,Captify (ID: Captify),15173,41,flag问题
我有7列数据,能够打印/删除所需的输出列(如果有效的话)。但是,由于第1列中数据中间的逗号很硬,awk认为我有超过7列,当我尝试删除第4列时,它不应该删除值,因为有些行被分流到不应该的列中。
我试过的
csvtool (它能够正确地确认列)的结果进行管道,并使用sed/awk来为其他事情划分逗号。我猜这是因为其他命令不理解csvtool对列的了解。FPAT,但是从我能够在线计算出的内容来看,我可以得到我想要的输出,但是我的脚本似乎只打印我的数据的最后一行。awk -F"," -v OFS=',' 'BEGIN {FPAT = "([^,]*)|(\"[^\"]+\")"} END {print $1,$2,$3,$5,$6,$7}' sample.csv
有没有人知道在我删除列的时候,有更容易的方法让我的列被理解,或者FPAT是唯一能做到这一点的方法,而我所做的却遗漏了一些东西?
发布于 2019-12-01 17:19:16
你能试一下吗。
awk -F"," -v OFS=',' 'BEGIN{FPAT="([^,]*)|(\"[^\"]+\")"} {print $1,$2,$3,$5,$6,$7}' Input_file或者更好地利用BEGIN :)
awk 'BEGIN{FS=OFS=",";FPAT="([^,]*)|(\"[^\"]+\")"} {print $1,$2,$3,$5,$6,$7}' Input_fileOP代码部分工作的原因:因为您使用END块并在那里打印所有东西,这就是它打印最后一行的原因(尽管很少的awk AFAIK没有定义这种行为)。END块是如何工作的:
awk__ 中有三个主要模块
BEGIN块:在读取任何Input_file之前运行,当您想在程序开始读取实际的Input_file.{...}主块之前初始化变量时,这一点很重要:现在是主块,其中所有Input_file记录(行)都将是read.END块:任何awk程序的END块都是在读取整个Input_file的程序完成后执行的,所以所有类型的计算(例如->使用数组),在处理完Input_file后打印最后一个值将在这里完成。man awk 所说的:
最后,在所有输入用完后,gawk将执行结束规则(如果有的话)中的代码。
https://stackoverflow.com/questions/59127981
复制相似问题