2011-05-22 182 views
0

如何將log.txt分割爲timeline.txtaction.txt使用最短 bash單行命令?如何垂直分割文本文件

tee <log.txt >(cut -d' ' -f1 >timeline.txt) >(cut -d' ' -f2- >action.txt)

但爲時已久,和cut重複。

log.txt的

[00:00] Do A 
[02:24] Do B 
[16:12] Do C 
... ... 

timelime.txt

[00:00] 
[02:24] 
[16:12] 
... ... 

action.txt

Do A 
Do B 
Do C 
... ... 
+0

爲什麼要以「最短的bash單行命令」要做到這一點?如果你做了很多,把它放到一個函數中。更少的代碼只有更好,如果你正在做的每行一兩件事。 – Johnsyweb 2011-05-22 06:00:02

+0

這不只是關於輸入法,而是性能。兩個切入的調用是重複的努力。我不知道在實踐中有多大的差異。 – 2011-05-22 07:09:15

回答

1

你想用cut

$ cut -f1 -d' ' log.txt > timelime.txt 
$ cut -f2- -d' ' log.txt > action.txt 

我假設你有「]」後一個空間,你是一個Unix的十歲上下的系統上。

0

在的問題,你表達有關調用兩次切關注;這裏,僅讀取一次輸入的方法:

 
sed 'h; s/[^ ]* //; waction.txt 
x; s/ .*//; wtimeline.txt' log.txt 
1
$ awk '{print $1 > "timelime.txt"; $1=""; print > "action.txt"}' log.txt 
+1

如果在'action.txt'行的開頭留下了一個空間(我的'awk'),那麼你可以'打印substr($ 0,2)>「action.txt」來照顧它。可能有更好的辦法,但我的awk-Fu並不是最強的。 – 2011-12-21 17:26:11

+0

@muistooshort是的,謝謝。 – kev 2011-12-21 17:31:34

+0

其實我喜歡你'awk'解決方案(與'substr'修復)比我的'cut'方法更好。我認爲有必要再次改變主意並接受你自己的回答:) – 2011-12-21 18:54:47