7

特定の行を削除する必要がある非常に大きなファイルがあります (行番号 941573 )

私はこの環境に少し慣れていませんが、問題をグーグルで調べても役に立ちませんでした。

sed コマンドをそのまま使用してみましたが、機能していないようです

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

私も試してみました

sed -e '941573d' filenameX > newfilenameY

それでも、「newfilenameY」ファイルと元のファイル「filenameX」の両方に、削除しようとしている行がまだ含まれています。これは fastq ファイルですが、それがどのように違いを生むかわかりません。私が言ったように、私はUNIXに慣れていないので、sedコマンドが間違っている可能性があります

4

3 に答える 3

8

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
于 2012-10-22T11:15:02.097 に答える
1

ファイルから 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
于 2012-10-22T11:16:34.800 に答える
0

1000000 行のテスト ファイルを生成して試してみたところ、 sed -e '941573d' filenameX > newfilenameYLinux では問題なく動作しました。

たぶん、私たちは別の誤解を持っています。行番号は 0 ではなく 1 から数えます。ゼロから数えると、941572 行が欠落していることがわかります。

を試しましたdiff filenameX newfilenameYか?これにより、予期しない変更が強調されます。

FASTQ 形式についてはよくわかりませんが、シーケンス番号ではなく、テキスト ファイルの行番号について話しているのですか?

一般的な行の長さの制限は 4096 バイトですが、それを超える行はありますか? (それはありそうもありませんが、質問する価値があると思いました)。

于 2012-10-22T16:06:11.880 に答える