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}
拡張は変数値を検索して置き換えます。 (ファイルに記録マニュアルに)- パターンがパターンで始まる場合、
%
パターンは文字列の末尾に固定されます。ここでは、文字列の末尾の空のパターンを一致させます。 - 変数は配列拡張である可能性があり、その場合は各配列要素に対して置換が発生します。
- パターンがパターンで始まる場合、
正直言って、このアプローチはとても賢いので、より確実なアプローチを選択したでしょう。