2

4行ごとに次のようなファイルがあります。

  HISEQ15:454:D27KKACXX:6:2316:16241:100283 1:N:0:GTTTCG 

(興味のある方は、このファイルに DNA 配列が含まれています)

スペースの後の最初の数字 (この場合は1) を除いて、スペースの後のすべてを削除し、文字列の先頭と数字の間に挿入する必要があるため、次/のようになります。

  HISEQ15:454:D27KKACXX:6:2316:16241:100283/1

私は Perl しか知らないのですが、私のファイルが 10GB を超えると、これには永遠に時間がかかります。

4

3 に答える 3

4

これはどうですか?

awk 'BEGIN{OFS="/"} NR%4==1{$2=$2*1}1' file

NR%4==14K+1 のすべての行番号を取得します。これらの行では{$2=$2*1}、つまり、スペースの後の 2 番目の部分を数値だけに変換します。次に、{}1すべての行を印刷しています。BEGIN{OFS="/"}OFS は「出力フィールドセパレーター」の略であるため、レコードを「/」で区切るには、この部分を使用します。

なお、NR%4==1変更する文字列の位置によって条件が変わる場合があります。1位、5位、9位なら・・・こんな感じでOKです。2 番目、6 番目の場合は、...NR%4==2などです。

テスト

$ cat a
HISEQ15:454:D27KKACXX:6:2316:16241:100283 1:N:0:GTTTCG 
a
b
d
HISEQ15:454:D27KKACXX:6:2316:16241:100283 7:N:0:GTTTCG 
ad
f
d
HISEQ15:454:D27KKACXX:6:2316:16241:100283 9:N:0:GTTTCG 
$ awk 'BEGIN{OFS="/"}NR%4==1{$2=$2*1}5' a
HISEQ15:454:D27KKACXX:6:2316:16241:100283/1
a
b
d
HISEQ15:454:D27KKACXX:6:2316:16241:100283/7
ad
f
d
HISEQ15:454:D27KKACXX:6:2316:16241:100283/9
于 2013-08-14T14:39:57.110 に答える
3

あなたはでこれを行うことができ、私はそれがよりきれいだと思います:

sed 's! \([0-9]\).*!/\1!;n;n;n;' input

を使用:

awk 'NR%4==1 { $0=$1"/"substr($2,1,1); }1' input
于 2013-08-14T14:43:56.597 に答える