【发布时间】:2016-08-09 09:44:27
【问题描述】:
我有一个制表符分隔的文本文件,结构如下
col1 col2 col3 col4 col5 col6
T1 a b c d x
T5 a b c d x
T3 a b c e y
T50 e f g h y
T2 e f g h y
T60 a b c d y
*如果两行或多行的 col2、col3、col4 和 col5 中的值相同,我希望将所有匹配行的 col6 的值放在一个额外的列中,该列中的 col1 的值标题。 所以在这种情况下,第 1 行和第 2 行应该被认为是相同的,因为 col2,3,4,5 的值是相同的 (abcd)。第 4 行和第 5 行(efgh)也是如此
*如果 col2、col3、col4 和 col5 中的值是唯一的,那么它只是应该放在新列中的那一行的 col6 的值。 所以在这种情况下,第 3 行是唯一的,因为其他行都没有 abce 作为 col2,3,4,5 的值。
所以输出应该是这样的。
col1 col2 col3 col4 col5 col6 T1 T2 T3 T5 T50 T60
T1 a b c d x x - - x - y
T5 a b c d x x - - x - y
T3 a b c e y - - y - - -
T50 e f g h y - y - - y -
T2 e f g h y - y - - y -
T60 a b c d y x - - x - y
我想在 perl 中做到这一点。但我不知道该怎么做。我应该使用散列来存储 col2-col3-col4-col5 的值吗?下面只是打开输入和输出文件的脚本的开始
#! /usr/bin/perl
use strict;
use warnings;
open(my $table1,'<', "input.txt") or die "$! - [$input]"; #input file
open(my $table2, '+>', "output.txt") || die ("Can't write new file: $!"); #output file
【问题讨论】:
-
我不明白想要的输出。你的意思是整个文件都是唯一的吗?文件有多大?
-
该文件包含大约 400000 行和 col1 中大约 60 个不同的值
-
如果两行有
col2 .. col5=a b c d但col6在一行是x而在另一行是y?
标签: perl