5

シーケンスデータを含むファイルがあります。新しい段落(2行の空白行で区切られています)には、新しいシーケンスが含まれています。

#example

ASDHJDJJDMFFMF
AKAKJSJSJSL---
SMSM-....SKSKK
....SK


SKJHDDSNLDJSCC
AK..SJSJSL--HG
AHSM---..SKSKK
-.-GHH

そして、私は次のようなファイルになりたいです:

ASDHJDJJDMFFMFAKAKJSJSJSL---SMSM-....SKSKK....SK
SKJHDDSNLDJSCCAK..SJSJSL--HGAHSM---..SKSKK-.-GHH

各シーケンスは同じ長さです(それが役立つ場合)。

また、異なるディレクトリに保存されている複数のファイルに対してこれを実行することも検討しています。

試したばかり

sed -e '/./{H;$!d;}' -e 'x;/regex/!d' ./text.txt

ただし、これによりファイル全体が削除されました:S

どんな助けでも喜ばれるでしょう-あなたがperlまたは何か他のものでそれをする方法を知っているなら、それはまた素晴らしいです。

ありがとう。

4

4 に答える 4

3

要求しているのは、各フィールドが改行で区切られている空白行で区切られたレコード(RS)のファイルを、各フィールドが何も区切られていない改行で区切られたレコード(OFS)のファイルに変換することだけです。適切なawk変数を設定し、レコードを再コンパイルするだけです。

$ awk '{$1=$1}1' RS= OFS= file
ASDHJDJJDMFFMFAKAKJSJSJSL---SMSM-....SKSKK....SK
SKJHDDSNLDJSCCAK..SJSJSL--HGAHSM---..SKSKK-.-GHH
于 2012-12-20T13:49:25.667 に答える
2
awk '
    /^[[:space:]]*$/ {if (line) print line; line=""; next}
    {line=line $0}
    END {if (line) print line}
'
perl -00 -pe 's/\n//g; $_.="\n"'

複数のファイルの場合:

# adjust your glob pattern to suit, 
# don't be shy to ask for assistance
for file in */*.txt; do
    newfile="/some/directory/$(basename "$file")"
    perl -00 -pe 's/\n//g; $_.="\n"' "$file" > "$newfile"
done
于 2012-12-20T15:22:39.577 に答える
1

必要に応じて、Perlワンライナー:

perl -nle 'BEGIN{$/=""};s/\n//g;print $_' file

$/変数はの変数と同等awkですRS。空のスティング("")に設定すると、2つ以上の空の行が1つの空の行として扱われます。これは、いわゆる「段落モード」の読書です。読み取られたレコードごとに、すべての改行文字が削除されます。スイッチは、-l各出力文字列の最後に改行を追加して、目的の結果を提供します。

于 2012-12-20T12:57:38.660 に答える
0

\nまたは\rの二重改行を見つけて、最初に:$:のような特殊な記号に置き換えてから、すべての改行を空の文字列に置き換えて、ファイル全体を1行にまとめてください。次に、特殊記号を単純な改行に置き換えます:)

于 2012-12-20T12:06:28.847 に答える