2017-09-04 82 views
0

有一個大文件,其中最後一個符號是\r\n。我需要刪除它們。這似乎等同於刪除最後一行(?)。 UPD:不,它不是:一個文件只有一行,以\r\n結尾。AIX:刪除文件中的最後一個符號(CRLF)

我知道兩種方法,但都沒有爲AIX工作:

sed 's/\r\n$//' file # I don't why it doesn't work 
head -c-2 # head doesn't work with negative numbers 

是否有任何AIX的解決方案?許多大文件必須處理,所以性能很重要。

+0

程序'split(1)'是一個選項...類似這樣的:'export Fname = insertfilenamehere; Fsize =「$(set - 'ls -l $ Fname'; echo $ 5)」;導出NewSize = $(expr $ Fsize - 2); split -b「$ NewSize」 - 「$ Fname」; mv xaa $ {Fname} _ $ {NewSize}' –

+1

'dos2unix文件'可能是您所需要的。製作一份最小的問題文件並對其進行測試。幸運的是,它會加載沒有問題或進一步搞亂。請注意,您可以指定多個文件作爲一個'dos2unix'調用的參數。祝你好運。 – shellter

+0

我的最後一條評論失去了格式,接下來嘗試:'export Fname = insertfilenamehere; Fsize =「$(set - $(ls -l $ Fname); echo $ 5)」;導出NewSize = $(expr $ Fsize - 2); split -b「$ NewSize」 - 「$ Fname」; mv xaa $ {Fname} _ $ {NewSize}' –

回答

0

通常,如果您需要通過腳本編輯文件,由於歷史原因,我使用ed。例如:

ed - /tmp/foo.txt <<EOF 
g/^$/d 
w 
q 
EOF 

ed不僅僅是有點詭異。還要注意,你並沒有真正刪除文件底部的空行,而是刪除了所有空行。使用ed和一些練習,您可能只能刪除文件底部的空行。例如轉到文件底部,搜索一個非空行,然後向下移動一行並從該點刪除到該文件的末尾。 ed命令腳本的行爲(幾乎),你所期望的。另外,如果他們確實有\ r \ n,那麼這些不會被認爲是空行,而是在其中具有控制-M(\ r)的行。如果是這種情況,你可能需要調整你的模式。

0

我的回答https://stackoverflow.com/a/46083912/3220113重複的問題也應該在這裏工作。另一種解決方案是使用

awk ' (NR>1) { print s } 
     {s=$0} 
     END { printf("%s",substr($2, 1, length($2)-1)) } 
    ' inputfile 
相關問題