2012-03-02 58 views
0

我有這對以下這種格式的每一行的內容(A,B,C,和D表示的文本)的文件:轉換一個 「AB [C] d」 格式的文件到CSV文件

A B [C] D 

例如:

cat Cat [noun] This animal likes to eat mice. 
  • 第一隔板是線路上的空格(」「)的第一次出現。
  • 第二個分隔符是第一個出現的空格,後面跟着一個方括號(「[」)。
  • 最後的分隔符是第一個出現的方括號後跟一個空格(「]」)。

我想所有的內容轉換這個文件到一個CSV文件,其中@到位逗號的使用:

[email protected]@[email protected] 
  • 原始文件包含UTF-許多外國字符8。
  • A和B的內容中沒有空格或括號。
  • C有時包含空格,但在給定的兩個內部沒有括號。
  • D包含空格,方括號等內容,其內容應保持不變。

如何將該文件轉換爲該格式?

回答

1

您需要執行字符替換。我建議你用正則表達式使用sed。這是對應於你的榜樣一段代碼:

sed -r 's/(|\[|\])+/@/g' file_to_modify.txt > file_for_output.txt 

用於替代以特定的方式每列,以下形式使用:

sed -r 's/([^ ]+) ([^ ]+) \[([^]]+)] (.*$)/\[email protected]\[email protected]\[email protected]\4/g' f1.txt > f2.txt 
+0

這是用「@」替換每個空格和括號,當它只應該替換第一個空格和第一個「[」和「]」時。 – Village 2012-03-03 14:04:21

2

聽起來像正則表達式的任務。字面括號使這有點醜陋,但這裏有一個符合您的示例文本。 。

^([^ ]+) ([^ ]+) \[([^]]+)\] (.*)$ 

你必須檢查的任何一種語言,你寫你的代碼中有關幫助創建正則表達式,我建議正則表達式API快報:http://www.ultrapico.com/Expresso.htm

+1

+1,但我會做第二項是'([^] +)'因爲空格是下面的分隔符 – 2012-03-02 12:06:05

+0

謝謝glenn,我錯過了關於B中沒有空格的規則。現在它是固定的。 – OlliM 2012-03-02 15:51:28

+0

如何使用它來轉換文件中的每一行? – Village 2012-03-03 00:02:54

1

字符串看起來像一個用戶定義爲csv fomart。
也許你可以試試csv模塊python

$ python3 
>>> import csv, io, re 
>>> '@'.join(next(csv.reader(io.StringIO(re.sub('[\[\]]', '\034', 'A B [c c c] D')), delimiter=' ', quotechar='\034'))) 
'[email protected]@c c [email protected]' 
+0

當我在D處放置一些符號時,它會輸出不尋常的結果。例如。 'A B [c c] D [你好]'輸出'A @ B @ c c c @ D \ x1chello \ x1c'。 – Village 2012-03-03 00:09:47