awk は、複数のファイルの行を順番に 1 つのファイルにマージします。

awk は、複数のファイルの行を順番に 1 つのファイルにマージします。

ファイルが多すぎるため、そのファイルの文字列を3つのグループにマージする必要があります。各ファイルには約100〜500行があり、結果ファイルは約100〜200Mbです。

ppcキーワードジェネレータは同じことをしますが、非常に遅いです。 100万個のキーワードの後に​​は、1つの結果ファイルが2〜3時間かかります。

f1

Acapella Audio Arts
Acoustic Smart

f2

australian
Australia
America

f3

Round Grille
Square Grille
grille
defence grille

結果

Acapella Audio Arts australian Round Grille
Acapella Audio Arts australian Square Grille
Acapella Audio Arts australian grille
Acapella Audio Arts australian defence grille
Acapella Audio Arts Australia Round Grille
Acapella Audio Arts Australia Square Grille
Acapella Audio Arts Australia grille
Acapella Audio Arts Australia defence grille
Acapella Audio Arts America Round Grille
Acapella Audio Arts America Square Grille
Acapella Audio Arts America grille
Acapella Audio Arts America defence grille
Acoustic Smart australian Round Grille
Acoustic Smart australian Square Grille
Acoustic Smart australianе grille
Acoustic Smart australian defence grille
Acoustic Smart Australia Round Grille
Acoustic Smart Australia Square Grille
Acoustic Smart Australia grille
Acoustic Smart Australia defence grille
Acoustic Smart America Round Grille
Acoustic Smart America Square Grille
Acoustic Smart America grille
Acoustic Smart America defence grille 
etc.....

ベストアンサー1

ちょうどbashを使用してください:

while IFS= read -u3 -r product; do
    while IFS= read -u4 -r region; do
        while IFS= read -u5 -r option; do
            echo "$product $region $option"
        done 5<f3
    done 4<f2
done 3<f1

このバージョンはファイルI / Oが少ないため(各ファイルは一度だけ読み取られる)、速度が速くなる可能性があります。

mapfile -t products < f1
mapfile -t regions  < f2
mapfile -t options  < f3
for product in "${products[@]}"; do 
    for region in "${regions[@]}"; do
        for option in "${options[@]}"; do
            echo "$product $region $option"
        done
    done
done

おすすめ記事