上午在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相關的問題?
我會建議先使用sed/awk格式化您的問題文本... – Kent
您的問題被忽略,因爲它的格式非常糟糕。請閱讀[常見問題](http://stackoverflow.com/faq) –
sed是簡單替換一條線的優秀工具。對於其他任何事情,請使用awk。 –