2

G_P_map.txt、G_S_map.txt、S_P_map.txt の 3 つのファイルがあります。awk を使用してこれら 3 つのファイルを結合する必要があります。内容の例は次のとおりです-

(G_P_map.txt 含む)

test21g|A-CZ|1mos
test21g|A-CZ|2mos
 ...

(G_S_map.txt 含む)

nwtestn5|A-CZ
nwtestn6|A-CZ
 ...

(S_P_map.txt 含む)

3mos|nwtestn5
4mos|nwtestn6

期待される出力:

1mos, 3mos
2mos, 4mos

これが私が試したコードです。最初の 2 つを組み合わせることができましたが、3 つ目と一緒にすることはできませんでした。

awk -F"|" 'NR==FNR {file1[$1]=$1; next} {$2=file[$1]; print}' G_S_map.txt S_P_map.txt 

どんなアイデア/助けも大歓迎です。前もって感謝します!

4

2 に答える 2

3

結合カットの組み合わせを見てみます。

于 2012-07-10T14:43:16.247 に答える
2

GNU AWK ( gawk) 4 にはBEGINFILEENDFILEこれに最適な と があります。ただし、このgawkマニュアルには、ほとんどのバージョンの AWK でこの機能を提供する機能が含まれています。

#!/usr/bin/awk

BEGIN {
    FS = "|"
}

function beginfile(ignoreme) {
    files++
}

function endfile(ignoreme) {
    # endfile() would be defined here if we were using it
}

FILENAME != _oldfilename \
{
    if (_oldfilename != "")
        endfile(_oldfilename)
    _oldfilename = FILENAME
    beginfile(FILENAME)
}

END   { endfile(FILENAME) }

files == 1 {    # save all the key, value pairs from file 1
    file1[$2] = $3
    next
}

files == 2 {    # save all the key, value pairs from file 2
    file2[$1] = $2
    next
}

files == 3 {    # perform the lookup and output
    print file1[file2[$2]], $1
}    

# Place the regular END block here, if needed. It would be in addition to the one above (there can be more than one)

次のようにスクリプトを呼び出します。

./scriptname G_P_map.txt G_S_map.txt S_P_map.txt
于 2012-07-10T15:15:53.827 に答える