AWK-移动字段(更正版本)

AWK-移动字段(更正版本),awk,Awk,我有一个文件: 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
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

谢谢你的帮助。

我想我已经理解了逻辑。
如果一行中有一个
-
,则从下一行中获取该字段,该行中有一个

然后从该行中删除字段

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

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
感谢@fedorqui的“解密”,我认为玩
RS
可以让问题更容易解决。我想出了一句俏皮话:(这句话和我的呆头呆脑有关)

测试:

感谢@fedorqui的“解密”,我认为玩
RS
可以让问题更容易解决。我想出了一句俏皮话:(这句话和我的呆头呆脑有关)

测试:


如果你解释一下背后的逻辑呢?理解波兰语并不是那么容易:)对我来说,它看起来像一个加密算法……很好,@Kent:)我认为它相当复杂:给定一个连字符
-
,添加下一个以右括号结尾的单词
@fedorqui你甚至可以找到模式!你这个该死的黑客@你是黑客!我看了一会儿课文,就放弃了。但是有了你的“解密”,我可以写一个小的解决方案如果你解释一下背后的逻辑呢?理解波兰语并不是那么容易:)对我来说,它看起来像一个加密算法……很好,@Kent:)我认为它相当复杂:给定一个连字符
-
,添加下一个以右括号结尾的单词
@fedorqui你甚至可以找到模式!你这个该死的黑客@你是黑客!我看了一会儿课文,就放弃了。但是有了你的“解密”,我可以写一个小的解决方案
czeresnia
应该有
filolek
而不是
tulipan
+1抛光:我现在做这个:)这就是我需要抛光的原因。
czeresnia
应该是
filolek
而不是
tulipan
+我现在做这个:)这就是为什么我需要对它进行一些抛光。在我的Ubuntu Linux上不起作用。它不会将单词从下到上移动。如果你看看你的解决方案,第二行的一个单词
trzy
不见了。@Jotne哦,是的,sub()是eaiser,我现在就更新。它是用GawkNot在我的Ubuntu Linux上测试的。它不会将单词从下到上移动。如果你看看你的解决方案,第二行的一个单词
trzy
不见了。@Jotne哦,是的,sub()是eaiser,我现在就更新。这是用呆呆的眼神测试的
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
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