2016-06-21 85 views
2

我一直在試圖解決幾個小時的問題,並沒有找到解決方案。我正在嘗試重新格式化已被錯誤解析的文本文件。該文件格式包含名的列表,從最後的名頭,對行下面的一個麻煩的唯一的名字:將單個字符串移到上一行

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 

問題是唐尼馮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 

任何想法,將海拉感激...

回答

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

感謝您的快速回復..您給了我一些新東西來學習awk if-else語句。 –

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(帶gawk)或[[:space:]]後面的正則表達式:/,\s*$//,[[:space:]]*$/

相關問題