2017-12-11 10 views
0

大きなテキストファイルが途中で壊れていますこのファイルを読み取ろうとすると、find AWKを使用して行数:ファイルの途中にファイルの破損がある場合、最初のN行をスキップしてファイルの残りの部分を印刷します

[email protected]> awk 'END{print NR}' file.txt 
awk: (FILENAME=file.txt FNR=300) fatal: error reading input file `file.txt': Input/output error 

だから私はすべてのことは、この破損した行の後に来る印刷し、それの前に来ることすべてで出力を結合するためにtailコマンドを使用してについて考えています。 tailコマンドは、このファイルの最後からファイルの読み込みを開始するので、デフォルトで正常に動作します。このファイルの最後を問題なく印刷できます。しかし問題は、このファイルが何行あるか分かりません。私は尾を使用して破損のポイントの前にすべての行をスキップしようとするのであれば、私が取得:

[email protected]> tail -n +301 file.txt > after_error.txt 
tail: error reading `file.txt': Input/output error 

尾は、当然のことながら、ファイルの終わりをから始まるファイルを読み込むことができますが、それはまだ読み込むことを意味しています最初のN行をスキップするように指示すると、ファイルの先頭から削除されます。

私の質問は、破損点の後にすべての行をどのように印刷するのですか?私はまた、このファイルを救助するための他の方法があるかどうかを知って嬉しいです。

+0

'BS = 1 'と' dd'と '=・オフセットはskip''とdd'が約ある ' – Thor

+0

あなたのために良い仕事かもしれないスキップしてみてください腐敗を避けるための合理的な方法です。ファイルを 'hexdump'または' od'して、破損が終了するオフセットを判断することもできます。 –

答えて

0

strings file.txt 

または

cp file.txt /otherPartition/file.txt 
+0

ありがとうございます、これらの2つのどちらも私のファイルの中で破損している文字列コマンド、エラーポイントの前にすべての行を印刷し、cpコマンドを停止し、I/Oエラーを出力します破損した地点に到達したとき。あなたは他の方法を考えることができますか?ありがとう! – Mng1

+0

'fchk'は必要ありませんでした。 –

関連する問題