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 に答える