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
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

谢谢你的帮助。

感谢@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
我想

我已经理解了其中的逻辑。
如果一行中有-,请从下一行中获取包含)的字段。
然后删除该行中的字段。

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

最新更新