2

我有以下由制表符(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}'

会很麻烦,特别是因为有 Code: n-columns

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

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 列中其行的原始值,而这些解决方案只是转置数据。关于我如何达到我想要的结果的任何想法?

4

2 回答 2

4

如果我理解正确,那么

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

应该管用。

于 2015-04-20T09:58:52.203 回答
3

未经测试,但这应该可以

awk '{for(i=2;i<=NF;i++)print $1,$i}' file
于 2015-04-20T09:59:52.767 回答