sed、awkパターン1行をコピーして次のパターン2行に貼り付ける

sed、awkパターン1行をコピーして次のパターン2行に貼り付ける

-city- ラインを -business- ラインの後ろの「すべての」ラインの末尾にコピーしたいと思います。

これ:

-country-france
-city-Paris, Marseille, Lyon, Toulouse, Nice, Nantes
-business-TotalEnergies
-business-AXA
-business-Carrefour
-business-Crédit Agricole
-business-Peugeot
-business-BNP Paribas

-country-india
-city-New Delhi, Bangalore, Mumbai, Chennai, Kolkata
-business-Reliance Industries Limited
-business-State Bank of India
-business-HDFC Bank
-business-ICICI Bank
-business-Tata Consultancy Services
-business-Larsen & Toubro

-country-japan
-city-Tokyo, Yokohama, Osaka, Nagoya, Sapporo, Fukuoka, Kobe
-business-Toyota Motor
-business-Mitsubishi UFJ Financial
-business-Softbank
-business-Nippon Telegraph & Tel

これに関して:

-country-france
-city-Paris, Marseille, Lyon, Toulouse, Nice, Nantes
-business-TotalEnergies -city-Paris, Marseille, Lyon, Toulouse, Nice, Nantes
-business-AXA -city-Paris, Marseille, Lyon, Toulouse, Nice, Nantes
-business-Carrefour -city-Paris, Marseille, Lyon, Toulouse, Nice, Nantes
-business-Crédit Agricole -city-Paris, Marseille, Lyon, Toulouse, Nice, Nantes
-business-Peugeot -city-Paris, Marseille, Lyon, Toulouse, Nice, Nantes
-business-BNP Paribas -city-Paris, Marseille, Lyon, Toulouse, Nice, Nantes

-country-india
-city-New Delhi, Bangalore, Mumbai, Chennai, Kolkata
-business-Reliance Industries Limited -city-New Delhi, Bangalore, Mumbai, Chennai, Kolkata
-business-State Bank of India -city-New Delhi, Bangalore, Mumbai, Chennai, Kolkata
-business-HDFC Bank -city-New Delhi, Bangalore, Mumbai, Chennai, Kolkata
-business-ICICI Bank -city-New Delhi, Bangalore, Mumbai, Chennai, Kolkata
-business-Tata Consultancy Services -city-New Delhi, Bangalore, Mumbai, Chennai, Kolkata
-business-Larsen & Toubro -city-New Delhi, Bangalore, Mumbai, Chennai, Kolkata

-country-japan
-city-Tokyo, Yokohama, Osaka, Nagoya, Sapporo, Fukuoka, Kobe
-business-Toyota Motor -city-Tokyo, Yokohama, Osaka, Nagoya, Sapporo, Fukuoka, Kobe
-business-Mitsubishi UFJ Financial -city-Tokyo, Yokohama, Osaka, Nagoya, Sapporo, Fukuoka, Kobe
-business-Softbank -city-Tokyo, Yokohama, Osaka, Nagoya, Sapporo, Fukuoka, Kobe
-business-Nippon Telegraph & Tel -city-Tokyo, Yokohama, Osaka, Nagoya, Sapporo, Fukuoka, Kobe

他の場所で使用したこの方法はここでは機能しません。助けてくれてありがとう。

sed -i -r ":begin;$!N;s/^-city-(.*)\n-business-(.*)/-business-\2-city-\1\n-city-\1/;tbegin;P;D" input

ベストアンサー1

そしてsed

sed '/^-country/{p;d};/^-city/{h;p;d};/^$/!{G;s/\n/ /}' test_file

複数行コメントで:

sed '
    /^-country/{p;d;}; # If found a country print and go to the next line
    /^-city/{h;p;d;};  # If found a city save the line, print and go to the next line
    /^$/!{G;s/\n/ /;}; # For any, non empty lines, get the one saved before and attach it to the current line.
' file

そしてawk

awk '/^-city/{h = $0} NF && !/^-(country|city)/ {$0 = $0 " " h} 1' test

基本的には上記と同じですsed

-city「save」で始まる行が見つかった場合。

次に、空でない各行(行または-country-city自体ではない)について、以前に保存された行に関連付けられている現在の行を印刷します。

おすすめ記事