Bash CSV-如何基于现有列添加列?
最好的方法是什么?如何做到 我收集了一些叫做Bash CSV-如何基于现有列添加列?,bash,awk,sed,Bash,Awk,Sed,最好的方法是什么?如何做到 我收集了一些叫做sed,AWK和bash的东西,它们可能是相关的。 我对一个命令使用了AWK一次,其他命令从未使用过。 我已经搜索过了,其他明显相似的问题没有我需要的答案 我在CSV文件中调用了字段: _________________________ field1 | field2 | field3| ------------------------- 1990AB | 123456 | 123456| ------------------------- 我想在这
sed
,AWK
和bash
的东西,它们可能是相关的。
我对一个命令使用了AWK
一次,其他命令从未使用过。
我已经搜索过了,其他明显相似的问题没有我需要的答案
我在CSV文件中调用了字段
:
_________________________
field1 | field2 | field3|
-------------------------
1990AB | 123456 | 123456|
-------------------------
我想在这三个原始字段的基础上添加字段
,如下所示:
_______________________________________________________
field1 | field2 | field3 | field1a | field2a | field3a |
-------------------------------------------------------
1990AB | 123456 | 123456| 1990 | 12345 | 12345 |
-------------------------------------------------------
其中:
field1a
1990第1列前4位始终是数字,然后是字母
field2a
12345第2列始终为6位数字
field3a
12345第3列始终为6位数字
这些是在数据库导入之前,每个文件执行一次操作
macosx
拥有约600万条记录。第二次尝试这个问题,作为我的第一次显然是不好的。在这方面,我是100%的新手。awk
救命
即使您以前没有awk
$ awk -F, -v OFS=, 'NR==1 {for(i=1;i<=3;i++) $(++NF)=$i"a"}
NR>1 {$(++NF)=substr($1,1,4);
$(++NF)=substr($2,1,5);
$(++NF)=substr($3,1,5)}1' file
$awk-F,-vofs=,'NR==1{for(i=1;i1{$(++NF)=substr($1,1,4);
$(++NF)=substr($2,1,5);
$(++NF)=substr($3,1,5)}1'文件
NR
是行号,是标题的特殊处理,NF
是字段数,这里每增加一列就增加,$i
是位置i
处的字段值。最后一个1
是打印行的简写。初始选项是设置输入字段分隔符(F)并将字段分隔符(OFS)输出为逗号。您的文件架构管道是否像这样在数据之间用空格分隔?在标题和数据之间是否有一条额外的记录,其中包含破折号?如果没有,您能否准确地共享文件的外观(前几条记录)那么您想要的输出到底是什么?同样,对于您想要的输出,您是否只想让字段
的前4个字符、字段2
和字段3
的前5个字符在您的记录中显示为新字段?或者这里是否应用了一些其他逻辑,例如字段4
只是数字部分field1
和field5
和field6
是field2
和field3
除以10,四舍五入到最接近的整数。管道空格、下划线和破折号是stackoverflow首选演示的插图,我认为如果我想要答案,应该使用。这是一个逗号分隔的文件,所以field1,field2,fieldn,…是的,有一个头行1。我假设“文件模式”是指它的布局方式。我将对问题稍加编辑以回答您的其他问题。谢谢。扔掉这些艺术品并向我们展示您的真实数据。我们需要您提供简洁、可测试的样本输入和预期输出,以便我们可以测试潜在解决方案,而不是我们可以查看并尝试猜测您的真实数据的表示可能会产生该视图(引用字段?字段周围的空格?等等)。@EdMorton这应该是粗体的:我们需要您提供简洁、可测试的示例输入和预期输出,以便我们可以测试潜在解决方案:)这将完全破坏某些CSV输入文件的输出,并为其他文件添加仅为0的字段,并对其他文件产生其他副作用。在我们看到输入内容之前,不确定是否值得发布答案,因为有一半的时间,当人们说他们的输入是CSV时,看不到逗号,而是制表符或分号或其他se分隔,我们不知道字段是否在引号内,或者可以包含逗号,甚至可以跨行,等等。对于阅读本文的任何其他人,不要假设如果这适用于一种CSV格式,它将适用于您的特定格式。这里说-v设置a(一)变量,但我看不到您设置了一个,这是如何工作的?您需要++来增加这个神秘的变量?变量集是输出字段分隔符,在print语句中暗示(这里1
).NF
是字段的数量,每次我们添加一个新列时,它都会增加,并且新字段被设置。答案中的解释是否不够清楚?