2012-10-22 22 views
5

私は特定の行(行番号941573)を削除する必要がある非常に大きなファイルを持っていますunixのファイルから特定の行を削除するには?

私はこの環境に多少なりとも問題はありません。

私のようなsedコマンドを使用して試してみたが、それは私も

sed -e '941573d' filenameX > newfilenameY 

を試してみた

sed -e '941572,941574d' filenameX > newfilenameY 

を動作していないようですそれでも「newfilenameY」ファイルと元のファイル 'filenameX'には、どちらも削除しようとしている行が含まれています。これはfastqファイルですが、どのように違いがあるのか​​分かりません。私が言ったように、私はUNIXで初めてだから、おそらくsedコマンドを間違えたかもしれない。

+0

私はこのアプローチを(はるかに小さなファイルで)試してみましたが、すべてが機能するようです。おそらくあなたは再チェックしたいですか? –

+0

私はかなりの時間を持っています –

+0

'sed -ne '941573p' filenameX'を実行して、sedが期待通りに行番号を数えているかどうかを確認することをお勧めします。 –

答えて

6

dは行/行を削除する。あなたの2番目のアプローチが働きます。

$ sed '941573d' input > output 

ロング例:

% for i in $(seq 1000000) 
do 
echo i >> input 
done 
% wc -l input 
1000000 input 
% sed '941573d' input > output 
% wc -l output 
999999 output 
% diff -u input output          :(
--- input  2012-10-22 13:22:41.404395295 +0200 
+++ output  2012-10-22 13:22:43.400395358 +0200 
@@ -941570,7 +941570,6 @@ 
941570 
941571 
941572 
-941573 
941574 
941575 
941576 

ショート例:

% cat input 
foo 
bar 
baz 
qux 
% sed '3d' input > output 
% cat output    
foo 
bar 
qux 
+2

これは、-eとは別に、OPがやっていることとどのように違うのですか(違いはありません)。 –

+0

@BrianAgnew違いはありません。 OPの第2のアプローチが機能する。 –

+0

それは私が考えたものだ –

0
ここ

ファイルから1つのまたは複数の行を削除する方法です。

構文:

sed '{[/]<n>|<string>|<regex>[/]}d' <fileName>  
sed '{[/]<adr1>[,<adr2>][/]d' <fileName> 
/.../=delimiters 
n = line number 
string = string found in in line 
regex = regular expression corresponding to the searched pattern 
addr = address of a line (number or pattern) 
d = delete 
0

私は1000000線でテストファイルを生成し、あなたのsed -e '941573d' filenameX > newfilenameYを試してみましたが、それは、Linux上でうまく働きました。

多分私たちはいくつかの誤解を持っているかもしれません。行番号はゼロからではなく1から数えます。ゼロから数えると、941572行が見つからないことがわかります。

diff filenameX newfilenameYを試しましたか?予期しない変更があればそれが強調されます。

FASTQフォーマットについてよく分かりませんが、私たちはテキストファイルの行番号と順序番号については話していますか?

一般的な行の長さの制限は4096バイトですが、それ以上の行はありますか? (それはありそうもないが、私はそれが質問に値すると思った)。

関連する問題