我有一个文件:
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
感谢您的帮助。
答案 0 :(得分:6)
感谢@ fedorqui的“解密”,我认为玩RS
可以让问题更容易解决。我想出了这个单行:(它与我的傻瓜合作)
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
答案 1 :(得分:4)
我想我已经理解了逻辑
如果一行中包含-
,请从下一行中获取包含)
的字段。
然后删除该行的字段。
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