【发布时间】:2019-05-04 05:54:11
【问题描述】:
如何添加 2 列(测试 1 和测试 2)并根据列标题名称在第四列中打印结果? (CSV 文件)- 逗号分隔文件
输入:
test1 test2 test3 test4
1 2 x
2 4 Y
输出:
test1 test2 test3 test4
1 2 x 3
2 4 Y 6
我尝试了以下方法,但我希望它基于列标题而不是位置。
awk -F, '{$3=$1+$2;} {print $1,$2,$3}' OFS=, testing.csv
awk -F, '{$3=$1+$2;} {print $1,$2,$3}' OFS=, testing.csv
输入:
test1 test2 test3 test4
1 2 x
2 4 Y
输出:
test1 test2 test3 test4
1 2 x 3
2 4 Y 6
【问题讨论】:
-
如果您的输入和输出是逗号分隔的,那么在您的示例中显示 THAT,不要显示空格分隔而不是您的实际格式。
-
@EdMorton 很抱歉造成混乱。我现在已经提到它是一个 csv 文件 - 以逗号分隔。
-
不要只提它——展示它。您的示例需要真正代表您的真实数据。如果您的真实数据以逗号分隔,则显示以逗号分隔的示例,而不是以空格分隔的示例。如果您的真实数据在数据行之间没有空行,则不要在示例中的数据行之间显示空行。
-
@EdMorton 使用“基于列标题”的方法——我们应该如何获取“列标题”的特定名称 i> 操纵?似乎我们将所有这些都归结为字段,而不管标题名称是什么,以便在最后一个字段中得出总和。除非您在某个时候将该信息传递到
awk脚本中,否则我看不到标题名称的相关性?我是否遗漏了一些明显的东西? -
好的,所以您的解释只是获取列标题字段名称并将它们用作数字引用来做同样的事情,但重要的是使用名称作为数字引用这里。如果这就是重点,那么是的,你做到了。我只是避免创建
test1 = 1, test2 = 2, etc..的引用并使用数字本身。我采用这种方法是因为标题行名称与以后发生的任何其他事情之间完全没有任何关联。