1

私はファイルを持っています:

A B C D E
jeden dwa- trzy cztery piec
czarny) bialy zielony niebieski siwy
czarny) bialy zielony niebieski siwy
kot pies mysz osa byk
jeblon grusza czeresnia- sliwa orzech
tulipan narcyz filolek) irys bez
sliwka jabkko pomarancza kiwi arbuz
5 A B C D E
sliwka jabkko pomarancza kiwi arbuz-
marek ewa ela tomek) romek

私が試してみました:

awk 'c-->0;/- /{c=1; print}' file

この例を改善して、そのような結果を得るにはどうすればよいですか? 私はこの結果を得たい:

A B C D E
jeden dwa-czarny) trzy cztery piec
 bialy zielony niebieski siwy
czarny) bialy zielony niebieski siwy
kot pies mysz osa byk
jeblon grusza czeresnia-filolek) sliwa orzech
tulipan narcyz  irys bez
sliwka jabkko pomarancza kiwi arbuz
5 A B C D E
sliwka jabkko pomarancza kiwi arbuz-tomek)
marek ewa ela  romek

ご協力ありがとうございました。

4

2 に答える 2

6

@fedorquiの「復号化」に感謝します。プレイRSすると問題が解決しやすくなると思います。私はこのワンライナーを思いつきました:(それは私のgawkで動作しました)

awk -v RS='\\S+\\)' -v ORS="" '{$0=sub(/-/,"-"RT)?$0:$0RT}7' file

テスト:

kent$  cat f
A B C D E
jeden dwa- trzy cztery piec
czarny) bialy zielony niebieski siwy
czarny) bialy zielony niebieski siwy
kot pies mysz osa byk
jeblon grusza czeresnia- sliwa orzech
tulipan narcyz filolek) irys bez
sliwka jabkko pomarancza kiwi arbuz
5 A B C D E
sliwka jabkko pomarancza kiwi arbuz-
marek ewa ela tomek) romek

kent$  awk -v RS='\\S+\\)' -v ORS="" '{$0=sub(/-/,"-"RT)?$0:$0RT}7' f
A B C D E
jeden dwa-czarny) trzy cztery piec
 bialy zielony niebieski siwy
czarny) bialy zielony niebieski siwy
kot pies mysz osa byk
jeblon grusza czeresnia-filolek) sliwa orzech
tulipan narcyz  irys bez
sliwka jabkko pomarancza kiwi arbuz
5 A B C D E
sliwka jabkko pomarancza kiwi arbuz-tomek)
marek ewa ela  romek
于 2013-11-06T11:40:14.423 に答える
4

ロジックは理解できたと思います。
行に a が含まれている場合は、-次の行から a が含まれているフィールドを取得します)
次に、その行からフィールドを削除します。

awk  '
    /-/ {
        a=$0
        getline
        for (i=1;i<=NF;i++) if ($i~")") 
            t=i
        sub(/-/,"-"$t,a)
        $t=""
        print a "\n" $0
        next
    }
    !/-/' file

A B C D E
jeden dwa-czarny) trzy cztery piec
 bialy zielony niebieski siwy
czarny) bialy zielony niebieski siwy
kot pies mysz osa byk
jeblon grusza czeresnia-filolek) sliwa orzech
tulipan narcyz  irys bez
sliwka jabkko pomarancza kiwi arbuz
5 A B C D E
sliwka jabkko pomarancza kiwi arbuz-tomek)
marek ewa ela  romek

そして、ワンライナーが好きな人のために:

awk '/-/ {a=$0;getline;for (i=1;i<=NF;i++) if ($i~")")t=i;sub(/-/,"-"$t,a);$t="";print a "\n" $0;next} !/-/' file

split を使用して単語を見つけ、ループしないようにして、いくつか短縮します。

awk  -F")" '
    /-/ {
        a=$0
        getline
        t=split($1,x," ")
        sub(/-/,"-"x[t]")",a)
        $t=""
        print a "\n" $0
        next
    }
    !/-/
    ' file

awk  -F")" '/-/ {a=$0;getline;t=split($1,x," ");sub(/-/,"-"x[t]")",a);$t="";print a"\n"$0;next} !/-/' file
于 2013-11-06T11:16:03.077 に答える