我一直试图解决问题几个小时,但没有找到解决方案。我正在尝试重新格式化已被错误解析的文本文件。文件格式包含一个名称列表,首先从姓氏开始,并在其中一行上有一个麻烦的唯一名字,如下所示:
Mussen, Steven
Fletcher, Bob
Monday, Mario
Glitch, Christopher
Fletcher, Bob
Ram, Dale
Ram,
Dale
Mussen, Steven
Von Hemie, Donnie
Gallape, Patrick
Desormore, J.
Sun, Dallas
Sun, Dallas
我尝试通过执行以下操作将文件转储到bash数组中:
declare -a GAMERS=($(cat Gamers.txt))"
然后运行for循环:
for i in "${GAMERS[@]}";do echo $i >>NewGamers.txt; done;
每行给我一个字。然后我尝试使用awk将每两行合并为一个:
awk 'NR%2{printf $0" ";next;}1' NewGamers.txt
问题是Donnie Von Hemie先生在他的名字中有三个字符串,使得我的awk解决方案毫无用处。最终目标是简单地解决错误的格式,在这种情况下,我试图将唯一的Dale移动到一排。最终输出应为:
Mussen, Steven
Fletcher, Bob
Monday, Mario
Glitch, Christopher
Fletcher, Bob
Ram, Dale
Ram, Dale
Mussen, Steven
Von Hemie, Donnie
Gallape, Patrick
Desormore, J.
Sun, Dallas
Sun, Dallas
任何想法都会受到欢迎......
答案 0 :(得分:2)
你可以保持简单并使用awk:
awk -F ' *, *' '!$2{if (!p) p=$0; else { print p, $0; p=""} next} 1' file
Mussen, Steven
Fletcher, Bob
Monday, Mario
Glitch, Christopher
Fletcher, Bob
Ram, Dale
Ram, Dale
Mussen, Steven
Von Hemie, Donnie
Gallape, Patrick
Desormore, J.
Sun, Dallas
Sun, Dallas
答案 1 :(得分:0)
$ awk '/,$/{p=$0; next} {print p $0; p=""}' file
Mussen, Steven
Fletcher, Bob
Monday, Mario
Glitch, Christopher
Fletcher, Bob
Ram, Dale
Ram, Dale
Mussen, Steven
Von Hemie, Donnie
Gallape, Patrick
Desormore, J.
Sun, Dallas
Sun, Dallas
如果逗号后面有空格,请在正则表达式\s
或[[:space:]]
中添加/,\s*$/
(带gawk)或/,[[:space:]]*$/
。