アッ

アッ

1000個のファイルを含むフォルダがあります。前のすべての文字はmapped.ILLUMINA.bwa.GIH.low_coverage.20130415.bam_dp個人IDを表します(例:NA21117、NA21119、NA21126、..)。

NA21117.mapped.ILLUMINA.bwa.GIH.low_coverage.20130415.bam_dp
NA21119.mapped.ILLUMINA.bwa.GIH.low_coverage.20130415.bam_dp
NA21126.mapped.ILLUMINA.bwa.GIH.low_coverage.20121211.bam_dp
NA21127.mapped.ILLUMINA.bwa.GIH.low_coverage.20130415.bam_dp
NA21137.mapped.ILLUMINA.bwa.GIH.low_coverage.20120522.bam_dp
NA21142.mapped.ILLUMINA.bwa.GIH.low_coverage.20130415.bam_dp
NA21143.mapped.ILLUMINA.bwa.GIH.low_coverage.20130415.bam_dp

各ファイルには1行しかありません。

cat NA21143.mapped.ILLUMINA.bwa.GIH.low_coverage.20130415.bam_dp
1   115258827   10

各ファイルごとに個々のIDをファイルの内容に貼り付けて、次のような出力を取得したいと思います。

1   115258827   10 NA21143

それを行う方法はありますか?

答え1

一般的なバッシュ

for file in *.bam_dp; do 
    contents=$(< "$file")
    echo "$contents ${file%%.*}" > "$file"
done

複数行ファイルの場合は、通常のbashを使用して実行できます。

for file in *.bam_dp; do 
    mapfile -t contents < "$file"
    printf "%s\n" "${contents[@]/%/ ${file%%.*}}" > "$file"
done

メモ:

  • このmapfileコマンドはファイルを行配列として読み込みます。
  • パラメータ${var/pattern/string}拡張は変数値を検索して置き換えます。 (ファイルに記録マニュアルに)
    • パターンがパターンで始まる場合、%パターンは文字列の末尾に固定されます。ここでは、文字列の末尾の空のパターンを一致させます。
    • 変数は配列拡張である可能性があり、その場合は各配列要素に対して置換が発生します。

正直言って、このアプローチはとても賢いので、より確実なアプローチを選択したでしょう。

答え2

ループを使用してください。

#!/bin/bash

shopt -s nullglob
for file in ???????.mapped.*bam_dp; do
  [[ -f "$file" ]] || continue
  id=${file%%.*}              # grab the ID from file name
  sed -i "s/$/ $id/" "$file"  # modify the file in-place
done

答え3

$ARGV から .* を削除し、ファイルに \t $ARGV を追加します。

perl -i -pe '$ARGV=~s/\..*//; s/$/\t$ARGV/;' NA*

Glennのソリューションはおそらくより速く実行されます。

perl -i -lpe '$_ .= " " . substr($ARGV,0,index($ARGV,"."))' NA*

ただし、ファイルごとに1行しかないと、ほとんどの時間ドライブが表示されます。

答え4

アッ

この方法はGNU(Linux)およびBSD(Mac)バージョンで動作しますawk

awk '{ id=FILENAME ; sub(/\..*/,"",id) ; print $0 "\t" id }' *.bam_dp
  • id=FILENAME ; sub(/\..*/,"",id)
    各ファイル名の最初の部分*.bam_dp(最初の前のすべての項目.)をid
  • print $0 "\t" id
    各ファイルの内容を印刷し、タブ、レコードを印刷しますid

例に示すように、行のリストが印刷されます。

1   115258827   10 NA21143

元のファイルは変更されません。たとえば、コマンドの最後に追加して> file.txtこの出力を保存できます。

関連情報