1

同じタブ区切りの列構造を持つ 10 個のファイルがあります。各ファイルの列 8 と 9 をマージする必要があります。次の AWK コードを思いつきましたが、一度に 2 つのファイルしかマージできません。10 個のファイルすべてを同時にマージする方法を探していますが、これが実現可能かどうかわかりません。

すべてのファイル名が同じパターン (s1s2.txt、s3s4.txt、s5s6.txt、.... s19s20.txt) に従う

#!/bin/bash

awk '
 BEGIN {
        #load array with contents of the first file
        while ( getline < "s1s2.txt" > 0)
         {
           s1s2_counter++
           f1_8[s1s2_counter] = $8
           f1_9[s1s2_counter] = $9
         }
}
   {OFS="\t"}

   { #output the columns 8 and 9 from the first file before the second file
    print f1_8[NR],f1_9[NR], $8, $9
   } ' s3s4.txt
4

1 に答える 1

4
awk -F'\t' '{a[FNR] = a[FNR] (NR==FNR?"":FS) $8 FS $9} END{for (i=1;i<=FNR;i++) print a[i]}' s1s2.txt .... s19s20.txt

通常、getline を使用するのは間違ったアプローチです。 http://awk.info/?tip/getlineを参照してください。

于 2013-09-23T19:32:23.023 に答える