2014-09-01 75 views
1

我的grepped數據有三列。第一列的位置是靜態的,而另外兩列以隨機順序出現。以下方案中的x和y部分有所不同。它們的長度是不變的。我想管道數據並有條件地切換每行的部分,以便每行的三列相同。我需要什麼線條狀切換部分

ADDED IDx UPDATEDy 
ADDED UPDATEDy IDx 
ADDED IDx UPDATEDy 
ADDED UPDATEDy IDx 
ADDED UPDATEDy IDx 
ADDED IDx UPDATEDy 

此刻的線

ADDED IDx UPDATEDy 
ADDED IDx UPDATEDy 
ADDED IDx UPDATEDy 
ADDED IDx UPDATEDy 
ADDED IDx UPDATEDy 
ADDED IDx UPDATEDy 

我一直在試圖寫一個sed表達式,如果行包含 「補充更新的」,切換「UPDATEDy 「與」IDx「通過在不同索引之間複製子字符串,但沒有運氣。我甚至不確定是否可以暫時存儲替換的零件,以便能夠隨後更換最後一個零件,以便切換零件。

提前致謝!

回答

2

只需使用AWK:

awk '/ADDED UPDATED/{ t=$3; $3=$2; $2=t } 1' file 

你幾乎可以肯定幹掉你前面的grep也爲AWK可以做任何有用的grep的可以做。

+1

非常感謝,這是我最終使用的。 – Johe 2014-09-03 07:15:30

1

嘗試這一個:

sed 's/ADDED\(\+UPDATED[^ ]\+\)\(\+ID[^ ]\+\)/ADDED\2\1/' file.txt 

對於其中修訂版ID之前出現,並捕獲兩UPDATEDx以及所述IDY部分線正則表達式搜索。在這些情況下,兩個捕獲的組只是交換(這是\2\1所做的)。
添加-i切換到sed來替換原地。

+0

謝謝。不幸的是,我沒有得到這個工作。我試着用不同的示例行以幾種方式應用它,但列沒有切換。 – Johe 2014-09-03 07:19:04

1

您可以使用此GNU sed的命令也,

sed -r '/ADDED/s/(+UPDATED\S+)(+ID\S+)/\2\1/' file 
+0

謝謝,但不幸的是,我沒有得到這個與我的示例列一起工作。 – Johe 2014-09-03 07:23:23