处理CSV文件:增加单元格坐标/位置

时间:2019-02-15 20:19:53

标签: excel csv auto-increment

我有一个csv文件,每行有一个条目,三个条目构成了整个数据集。因此,我现在要做的是将这些集合放在每一行的列中。我很难描述问题(因此我的搜索没有给我解决方案),所以这里有一个例子。
样本CSV文件:

1  Joe  
2  Doe  
3  7/7/1990  
4  Jane  
5  Done  
6  6/6/2000  

我最后想要的是:

1  Name  Surname  Birthdate  
2  Joe   Doe      7/7/1990  
3  Jane  Done     6/6/2000  

我正在尝试寻找一种自动解决方案,因为我的实际文件由480个数据集组成,每个数据集包含16个条目,而手动进行将需要几天的时间。

我能够用Excel的间接函数填充第一行:

=INDIRECT("A"&COLUMN()-COLUMN($A1))

当COLUMN返回列号时,如果我在Excel中向下拖动第一行,显然这与第一行完全相同:

1  Name  Surname  Birthdate  
2  Joe   Doe      7/7/1990  
3  Joe   Doe      7/7/1990  

现在我正在寻找一种将单元格位置增加一个的方法:

   A           B      C       D
1 Joe        =A1   =B1+1   =C1+1
2 Doe        =D1+1
3 7/7/1990
4 Jane  

应该导致什么:

   A           B    C     D  
1 Joe        =A1   =A2   =A3  
2 Doe        =A4   =A5   =A4  
3 7/7/1990  
4 Jane  

在给定的示例中您可以看到,A的单元格坐标以1递增,我不知道如何在Excel中自动执行此操作。我认为肯定有比使用嵌套Excel函数更好的方法,因为任务(增量+1)看起来实际上很容易。
我也愿意接受涉及sed,awk(我只具有非常肤浅的知识)或其他命令行工具的解决方案。
非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

 awk 'BEGIN { y=1; printf "Name Surname Birthdate\n%s",y; x=1;}
  {if (x == 3) {
   y = y + 1;
   printf "%s\n%s",$2,y;
   x=1;
  }
  else {
   printf " %s ",$2;
   x = x + 1;
  }}' input_file.txt

这可能适合您想做的事情。您的示例不包含逗号,因此我不确定它们是否真的在其中。如果是这样,您将需要使用-F,标志稍作修改,以便将其视为此类代码。

第二个代码段将为输出提供一个逗号分隔符。同样,假设您的示例输入文件没有逗号来分隔1 Joe和2 Doe。

awk 'BEGIN { y=1; printf "Name Surname Birthdate\n%s",y; x=1;}
 {if (x == 3) {
  y = y + 1;
  printf "%s\n%s,",$2,y;
  x=1;
 }
  else {
  printf " %s,",$2;
  x = x + 1;
 }}' input_file.txt

两个awk脚本都将x和y变量设置为1,其中y变量将增加行号。 x变量最多可计数3,然后将自身重置为1。这样,它可以连续打印每一行,直到到达第三项,然后在第三项中插入换行符。

使用正则表达式和perl之类的语言可以更容易/更复杂地完成此操作,但是由于您提到过awk,因此我相信这样做会很好。