2013-01-31 86 views
1

上午在Windows Vista上工作用的GnuWin32(SED 4.2.1和核心工具5.3.0)。還有ActivePerl 5.14.2包。使用SED改變<CR><LF>一個符號

我有一個大的多記錄文件。文件中每個記錄的結尾用四個美元符號($$$$)表示。在每個邏輯記錄中有很多「CRLF」。

我想與爲|+|這樣的符號來代替CRLF的所有實例。然後,我將用CRLF替換$$$$。結果:每行一條記錄導入到Excel中以供進一步操作。

我試過幾種方法轉化CRLF|+|但沒有成功。

例如,一種方法是:sed -e "s/[\r\n]/|+|/g" source_file_in target_file_out

另一種方法中使用tr -d刪除\r,然後第二個語句:sed -e "s/\n/|+|/g" source_file_in target_file_out

tr語句工作; sed聲明沒有。

我讀過以下文章,但看不到如何改編它們以用|+|之類的符號替代\r\n

sed: how to replace CR and/or LF with "\r" "\n", so any file will be in one line

Replace string that contains CRLF?

How can I replace a newline (\n) using sed?

如果這個問題不能輕易使用sed(和tr)來解決,然後我會,如果有人給我看如何使用Perl。


謝謝你的建議。

awk腳本還沒有完全工作,所以我會添加一些缺少的細節,希望您能夠微調您的建議。

首先,我正在運行gawk v3.1.6.2962。我相信awk的實現可能有所不同,所以這可能是一個有用的信息。

接下來,介紹一些關於數據類型和數據來源的更多信息。

數據是關於化學物質(輸入到立體化學繪圖程序的文本數據)。

化學文件格式爲.sdf格式。

當我用記事本打開「133711.sdf」 ++(使用查看/顯示符號/顯示所有字符),我看到在屏幕截圖所示的數據: https://dl.dropbox.com/u/3094317/_master_1_screen_shot_.png

正如你看到的,只有LF - 沒有CR。 我相信這意味着.sdf文件的來源是一個UNIX系統。

接下來,我運行Windows命令COPY * .sdf _master_2_.txt。這創建了我想要解析爲記錄的非常大的文件文件。

_master_2_.txt具有與133711.sdf-LF相同的結構;沒有CR。

然後,我在.BAT文件中運行awk推薦。我需要用雙引號替換你的單引號,因爲微軟創造了我。

awk -v FS =「\ r \ n」-v OFS =「| + |」 -v RS =「\ $ \ $ \ $ \ $」-v ORS =「\ r \ n」「{$ 1 = $ 1} 1」C:_master_2_.txt> C:\ output.txt

I'已附加了output.txt的屏幕提示: https://dl.dropbox.com/u/3094317/output.txt.png

正如您所看到的,awk命令未將「\ r \ n」替換爲「| + |」。

此外,Windows使用CRLF創建output.txt。

它成功地用CRLF取代了四個$。

此信息是否足以更新您的awk建議以處理與Windows相關的問題?

+2

我會建議先使用sed/awk格式化您的問題文本... – Kent

+0

您的問題被忽略,因爲它的格式非常糟糕。請閱讀[常見問題](http://stackoverflow.com/faq) –

+0

sed是簡單替換一條線的優秀工具。對於其他任何事情,請使用awk。 –

回答

0

與GNU AWK試試這個:

awk -v FS='\r\n' -v OFS='|+|' -v RS='\\$\\$\\$\\$' -v ORS='\r\n' '{$1=$1}1' file 

我看到你更新的問題,你是在Windows上。爲了避免可笑引用規則和問題,把這個名爲「whatever.awk」文件:

BEGIN{FS="\r\n"; OFS="|+|"; RS="\\$\\$\\$\\$"; ORS="\r\n"} {$1=$1}1 

,並運行它

awk -f whatever.awk file 

,看看有沒有你想要做什麼。

+0

謝謝你的建議。 awk腳本還沒有完全工作,所以我會添加一些缺失的細節,希望能夠對您的建議進行微調。 我已經在這裏解釋了輸入和輸出 - I/O比我的原始問題的註釋部分允許的時間長。 https://dl.dropbox.com/u/3094317/_follow_up_post_.mht – user2028514

+0

請勿將您的示例輸入和期望的輸出放在其他某個網站上,也不要放在原始文章的評論部分。只需編輯您的原始帖子,以提供缺失的信息。 –

+0

完成 - 參見上文。 – user2028514