我有一个格式为
的文件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
答案 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
但是根据您的输入,第五和/或第七个数字1
和1
分别没有意义。第二行的最后一个2
是第五列还是第七列中的数字?