Bash 如何使用awk将带有标题的新列添加到csv
我在处理CSV的bash脚本中使用了一些awk。awk做到了这一点:Bash 如何使用awk将带有标题的新列添加到csv,bash,csv,awk,Bash,Csv,Awk,我在处理CSV的bash脚本中使用了一些awk。awk做到了这一点: ORIG_FILE="score_model.csv" NEW_FILE="updates/score_model.csv" awk -v d="2017_01" -F"," 'BEGIN {OFS = ","} {$(NF+1)=d; print}' $ORIG_FILE > $NEW_FILE 这一转变的目的是: # before model_description, type, e
ORIG_FILE="score_model.csv"
NEW_FILE="updates/score_model.csv"
awk -v d="2017_01" -F"," 'BEGIN {OFS = ","} {$(NF+1)=d; print}' $ORIG_FILE > $NEW_FILE
这一转变的目的是:
# before
model_description, type, effective_date, end_date
Inc <= 40K, Retired, 08/05/2016, 07/31/2017
Inc > 40K Age <= 55 V5, Retired, 04/30/2016, 07/31/2017
Inc > 40K Age > 55 V5 , Retired, 04/30/2016, 07/31/2017
# after, bad
model_description, type, effective_date, end_date, 2017_01
Inc <= 40K, Retired, 08/05/2016, 07/31/2017, 2017_01
Inc > 40K Age <= 55 V5, Retired, 04/30/2016, 07/31/2017, 2017_01
Inc > 40K Age > 55 V5 , Retired, 04/30/2016, 07/31/2017, 2017_01
#之前
型号说明、类型、生效日期、结束日期
Inc 40K年龄40K年龄>55岁V5,退休,2016年4月30日,2017年7月31日
#之后,很糟糕
型号说明、类型、生效日期、结束日期、2017年1月
Inc 40K年龄40K年龄>55岁V5,退休,2016年4月30日,2017年7月31日,2017年1月
我希望新列有一个标题,这样新的CSV看起来像
# after, desired
model_description, type, effective_date, end_date, cmpgn_group
Inc <= 40K, Retired, 08/05/2016, 07/31/2017, 2017_01
Inc > 40K Age <= 55 V5, Retired, 04/30/2016, 07/31/2017, 2017_01
Inc > 40K Age > 55 V5 , Retired, 04/30/2016, 07/31/2017, 2017_01
#之后,需要
型号说明、类型、生效日期、结束日期、cmpgn组
Inc 40K年龄40K年龄>55岁V5,退休,2016年4月30日,2017年7月31日,2017年1月
我知道有一种方法可以分别在第一行中指定要执行的操作,但我还没有弄清楚。遵循awk(解决方案中有点变化)应该适合您
awk -v d="2017_01" 'BEGIN{FS=OFS=","} {print $0, (NR>1?d:"cmpgn_group")}' file
ORIG_FILE="score_model.csv"
NEW_FILE="updates/score_model.csv"
awk -v d="2017_01" -F"," 'BEGIN {OFS = ","} FNR==1{$(NF+1)="cmpgn_group"} FNR>1{$(NF+1)=d;} 1' $ORIG_FILE > $NEW_FILE
解决方案2:或者让我们删除此$(NF+1)(
创建新的字段方法)并尝试直接打印它
awk -v d="2017_01" -F"," 'BEGIN {OFS = ","} {printf("%s%s",$0,FNR>1?d RS:"cmpgn_group" RS)}' $ORIG_FILE > $NEW_FILE
上述命令说明:
model_description, type, effective_date, end_date, cmpgn_group
Inc <= 40K, Retired, 08/05/2016, 07/31/2017, 2017_01
Inc > 40K Age <= 55 V5, Retired, 04/30/2016, 07/31/2017, 2017_01
Inc > 40K Age > 55 V5 , Retired, 04/30/2016, 07/31/2017, 2017_01
使用sed
$ sed '1s/$/,\tcmpgn_group/; 2,$s/$/,\t2017_01/' file
i、 e代表第1行
:追加,\tcmpgn\u组
对于
2到$
:追加,\t2017\u 01
使用awk
$ awk -v d="2017_01" -F"," 'FNR==1{a="cmpgn_group"} FNR>1{a=d} {print $0",\t"a}' f1
输出:
model_description, type, effective_date, end_date, cmpgn_group
Inc <= 40K, Retired, 08/05/2016, 07/31/2017, 2017_01
Inc > 40K Age <= 55 V5, Retired, 04/30/2016, 07/31/2017, 2017_01
Inc > 40K Age > 55 V5 , Retired, 04/30/2016, 07/31/2017, 2017_01
型号描述、类型、生效日期、结束日期、cmpgn组
Inc 40K年龄40K年龄>55岁V5,退休,2016年4月30日,2017年7月31日,2017年1月