【问题标题】:Add a new column to the file向文件中添加新列
【发布时间】:2011-09-26 07:45:47
【问题描述】:

如何向带有 awk 代码的文件添加新列?

原始文件

F1 F2 F3 ..F10 

将 F11 添加到 original.file

F1 F2 F3 ..F10 F11

【问题讨论】:

  • F11从何而来?它是从 F1..F10 计算出来的还是存储在另一个文件中?
  • 它是如何存储在另一个文件中的?每行的每个字段?还是来自 CSV 的字段,或类似的东西?两个文件之间有映射关系吗?最好给我们例子,original.file,“another.file”和你的预期输出。
  • 可能重复:stackoverflow.com/q/1636755/45249。我的答案是使用paste 而不是awk,但其他答案也可能有用。

标签: awk add


【解决方案1】:

awk '{print $0, "F11"}' original.file

【讨论】:

  • 甚至awk '$0=$0"F11"' original.file
  • awk -v OFS=x '{print $0, "F11"}' 如果要更改输出字段分隔符 (x)
【解决方案2】:

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

备注:我们假设字段分隔符FS 等于字符串"fs"。您可以将其替换为任何内容,或者如果您只使用 作为字段分隔符,则可以在以下任何解决方案中删除 BEGIN{FS=OFS="fs"} 部分。

在开头添加一列:

awk 'BEGIN{FS=OFS="fs"}{print value OFS $0}' file

在末尾添加一列:

awk 'BEGIN{FS=OFS="fs"}{print $0 OFS value}' file

n列之前添加一列:

awk 'BEGIN{FS=OFS="fs"}{$n = value OFS $n}1' file

在列n之后添加列:

awk 'BEGIN{FS=OFS="fs"}{$n = $n OFS value}1' file

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

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

或用于不同的值

awk 'BEGIN{FS=OFS="fs"; 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="fs"; split("n1,n2,n3,...,nm",a,",")}
     {for(i=m;i>0;--i) $(a[i]) = $(a[i]) OFS value}1' file

或用于不同的值

awk 'BEGIN{FS=OFS="fs"; 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

【讨论】:

  • 哦,太好了。很有帮助。只是想知道“在第 n 列之后/之前添加一列”中的 1 来自哪里,这是什么意思?
  • @applequist 1 是执行默认操作print $0 的默认条件。见unix.stackexchange.com/q/63891/273492
【解决方案3】:

尝试:

awk 'BEGIN{getline to_add < "f3"}{print $0,to_add}' f

从文件“f3”中读取要添加的列,并将其保存在变量 to_add 中。之后,它将列添加到文件 f 的每一行。

HTH 克里斯

【讨论】:

  • 这为我将 f3 的第一行添加到每一列。应该是 awk '{getline to_add
猜你喜欢
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 2019-09-03
  • 2012-07-09
  • 1970-01-01
相关资源
最近更新 更多