linux打印列的所有列数据的最后一行

时间:2014-06-16 15:43:23

标签: unix awk cut

我有一个格式为

的文件
1  1.0  1   1.0   1   2.0   1    3.0
2  2.0  2   3.0             2 
3  2.0  3   4.0
4  6.0 
5  3.0

我想要打印所有列的最后一行。在实际数据中,行数和列数在100s范围内。 我尝试过tail,awk和cut命令,但没有成功。

期望输出

5 3.0   3 4.0  1 2.0  1 3.0

2 个答案:

答案 0 :(得分:0)

我认为此时最简单的做法就是用您选择的脚本语言(Python,Ruby等)编写一些东西。该过程可能如下所示:

for line in file:
  columns = break_into_columns(line)
  #a good column format might be [[1, 1.0], [1, 1.0], [1, 2.0], [1, 3.0]]
  for i in len(columns):
    if columns[i][1]==None:
      if cache[i]!= None:    #so we only print the last item once
        print cache[i]
  cache = columns

答案 1 :(得分:0)

awk的解决方案可能是以下

awk '{for(i=1;i<=NF;++i){A[i] = $i}} END {for(i in A){str = str" "A[i];} print str}' test.dat

此输出

5 3.0 3 4.0 2 2.0 1 3.0

它的工作方式,awk读取每一行,并告诉它将每个nth列存储到数组A中的相应位置。如果列中没有数字,则前一个数字不会被覆盖,因此在文件末尾,数组A应包含每列中的每个最后一个数字。然后我们只打印这个数组

请注意,您说所需的输出是

5 3.0   3 4.0  1 2.0  1 3.0

但是根据您的输入,第五和/或第七个数字11分别没有意义。第二行的最后一个2是第五列还是第七列中的数字?