【问题标题】:add various new columns to a CSV file using awk使用 awk 将各种新列添加到 CSV 文件
【发布时间】:2018-10-11 20:21:27
【问题描述】:

我有一个 CSV 文件。例如列:

col1, col2, col3, col4, col5

我需要将其重组为

col1, col2, new_col1, col3, new_col2, col4, new_col3, col5.

行中的值将为空。我假设这必须通过 完成。

我已经在 StackOverflow 中尝试了这些问题,但我得到的只是在末尾或开头添加。我需要能够指定需要添加列名的列号/位置。

【问题讨论】:

  • 请显示当前尝试查看问题所在。
  • 抱歉,这不是 StackOverflow 的工作方式。 “我想做 X,请给我提示和/或示例代码”形式的问题被认为是题外话。请访问help center并阅读How to Ask,尤其是阅读Why is “Can someone help me?” not an actual question?
  • awk 非常适合这个! $1 包含第一列,$2,第二列等等。祝您好运,当您遇到困难并需要其他帮助时更新您的问题
  • 您的问题有点不清楚,因为您声明:_需要能够指定需要添加列名的列号/位置。_这是否意味着您也想处理标题?

标签: awk csv awk


【解决方案1】:

备注:此答案假定没有 CSV 字段条目具有嵌入 - 或 -characters 的 字符串 ("string").

如果上述方法不适用于您的问题,则需要其他方法。有用的链接:


如果要向 CSV 文件添加列,可以执行以下操作:

在开头添加一列:

awk 'BEGIN{FS=OFS=","}{print new_value OFS $0}' file

在末尾添加一列:

awk 'BEGIN{FS=OFS=","}{print $0 OFS new_value}' file

n列之前添加一列:

awk 'BEGIN{FS=OFS=","}{$n=new_value OFS $n}1' file

n 列之后添加列:

awk 'BEGIN{FS=OFS=","}{$n=$n OFS new_value}1' file

在每列n1之前添加一列n2<...>nm:(从后面开始)

awk 'BEGIN{FS=OFS=","; split("n1,n2,n3,...,nm",a)}
     {for(i=m;i>0;--i) $(a[i])=new_value OFS $(a[i])}1' file

或用于不同的值

awk 'BEGIN{FS=OFS=","; split("n1,n2,n3,...,nm",a); split("value1,value2,...,valuem",v)}
     {for(i=m;i>0;--i) $(a[i])=v[i] OFS $(a[i])}1' file

在每列n1之后添加一列n2<...>nm:(从后面开始)

awk 'BEGIN{FS=OFS=","; split("n1,n2,n3,...,nm",a)}
     {for(i=m;i>0;--i) $(a[i])=$(a[i]) OFS new_value}1' file

或用于不同的值

awk 'BEGIN{FS=OFS=","; split("n1,n2,n3,...,nm",a); split("value1,value2,...,valuem",v)}
     {for(i=m;i>0;--i) $(a[i])=$(a[i]) OFS v[i]}1' file

【讨论】:

  • 不错的答案,但您确实启用了“请给我提示和/或示例代码”,不是吗 ;-> ?祝大家好运!
  • @shellter 也许是真的。如果这个问题很有趣,我不介意帮助别人,因为我认为它可以帮助其他人。尽管如此,我将始终传达强制性信息以明确表明这不是前进的方式,希望他们的下一个问题可能更符合标准。
  • 我希望这很明显我并不在乎,因为似乎没有任何方法可以治愈早期的海报无法阅读和吸收 ??附加到[help] 的页数 ;-) 。最终,你可能会厌倦这样的问题,如果不是,你是一个比我更好的人 ;-) 。再一次,这个问题的一个非常完美的答案。祝大家好运。
【解决方案2】:

好的,假设您的 csv 如下所示:

col1, col2, col3, col4, col5
1, 2, 3, 4, 5

然后,命令:

awk 'BEGIN{FS=OFS=","}{print $1,$2,"new_Col1",$3,"new_Col2",$4,"new_Col5",$5}' t.csv

将给出以下输出:

col1, col2,new_Col1, col3,new_Col2, col4,new_Col5, col5
1, 2,new_Col1, 3,new_Col2, 4,new_Col5, 5

你明白了吗?这是你想知道的吗?

更容易阅读:

awk '{print $1","$2",new_Col1,"$3",new_Col2,"$4",new_Col5,"$5}' t.csv

【讨论】:

    猜你喜欢
    • 2023-02-05
    • 1970-01-01
    • 2015-01-11
    • 2022-07-07
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2018-11-29
    相关资源
    最近更新 更多