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