为每个n列值创建新行,同时保持Col.1值

时间:2015-04-20 09:55:35

标签: awk sed terminal row col

我有以下类型的数据由制表符(n列)分隔:

-2  abandonar   abandono    abandonas   abandona    abandonamos abandonáis  abandonan   
-4  abandonado  abandonada  abandonados abandonadas 
-2  abandona    abandonos                                       
-3  secuestrado secuestrada secuestrados    secuestradas    secuestraría    secuestrarías   secuestraríamos secuestraríais  secuestrarían

我需要保留第1列中的值,但我需要将以下列中的每个字符串移动到它们自己的行。期望的结果是:

-2  abandonar
-2  abandono
-2  abandonas
-2  abandona
-2  abandonamos
-2  abandonáis
-2  abandonan   
-4  abandonado
-4  abandonada
-4  abandonados
-4  abandonadas 
-2  abandona    
-2  abandonos                                       
-3  secuestrado 
-3  secuestrada 
-3  secuestrados    
-3  secuestradas    
-3  secuestraría    
-3  secuestrarías   
-3  secuestraríamos
-3  secuestraríais
-3  secuestrarían

awk中是否有允许此类操作的功能? 简单地写出我需要在每行上打印的内容:

$awk '{print $1, $2, etc}'

会非常麻烦,特别是因为有 码: n列

到目前为止,我已经尝试了一些有助于解决有关转置数据问题的awk解决方案。我找到了这个解决方案here

awk '{ for (i=1;i<=NF;i++ ) printf $i " " }'

awk '{
       for (f = 1; f <= NF; f++) { a[NR, f] = $f } 
     }
     NF > nf { nf = NF }
     END {
       for (f = 1; f <= nf; f++) {
           for (r = 1; r <= NR; r++) {
               printf a[r, f] (r==NR ? RS : FS)
           }
       }
    }' input

然而,正如您可能看到的那样,它们并没有完全解决问题,因为我希望每列也附加到第1列中其行的原始值,这些解决方案只是转置数据。 关于我如何达到理想结果的任何想法?

2 个答案:

答案 0 :(得分:4)

如果我理解正确,那么

awk '{ for(i = 2; i <= NF; ++i) print $1, $i }' filename

应该有用。

答案 1 :(得分:3)

未经测试,但这应该有效

awk '{for(i=2;i<=NF;i++)print $1,$i}' file