以下を使用して2000を超える5K SNPファイルに分割された遺伝子型ファイルがあります。
split -d geno_file
私が得た結果は次のとおりです。
table_subset_0001
table_subset_0002
table_subset_0003
.
.
table_subset_0099
.
.
table_subset_0999
ゼロを削除して取得したいです。
table_subset_1
table_subset_2
table_subset_3
.
.
table_subset_93
.
.
table_subset_999
これを行う方法はありますか?
答え1
Perlユーティリティの使用rename
:
rename 's/_0+/_/' table_subset_*
これにより、_
次の0文字がに置き換えられます_
。
上記はrename
Perlに付属のユーティリティ(時々呼び出される)と連携して動作します。prename
一部のディストリビューションは、完全に互換性のないユーティリティrename
からユーティリティをインストールしますutil-linux
。
Perlの名前変更がシステムにまだインストールされていない場合は、それをインストールする方法を見つけることができます。ここ
答え2
純粋さのために...
純粋なbash
答え:(@ steeldriverに感謝します)
shopt -s extglob
for file in table_subset_0*; do
mv "$file" "${file/_+(0)/_}"
done
純粋なGNUのsed
答え:
ls | sed -n -r '
/^(table_subset_)0+(.*)/ ! d
s//mv & \1\2/
e
'
純粋なGNUのawk
答え:
ls | awk -F '_0+' 'NF > 1 { system("mv " $0 " " $1 "_" $2) }'
答え3
@John1024のソリューションに追加するために標準のBashコマンドを使用する同様のソリューションがあります。
for file in table_subset_*; do
new_name=$(echo "$file" | sed -E -e 's/_0+/_/')
mv "$file" "$new_name"
done
原理は同じです。すべてのファイルを繰り返し_0
て_
。
答え4
まず、他のツールをawk
使用して実行する代わりに使用できます。split
rename
awk 'NR%5000==1{ file=sprintf("table_subset_%d", ((++c)) )} {print >file}' geno_file
これにより、ファイルは前にゼロのない数字のサフィックスを持つ5Kファイルチャンクに分割されますが、上記の4ビット長をgeno_file
自由に使用できます。0Xd
sprintf("..._%04d", ((++c)) )
geno_file
または、出力ファイルを9つの部分に分割する場合は、最初に適切なオプションを使用してsplit
1(デフォルトは0)から始まる数字のサフィックスを設定し-a N
(長さN(デフォルトは2)のサフィックスを生成)、単に次のように使用できます。あります。
split -a 1 --numeric-suffixes=1 -l TOTALLINES/9HERE table_subset_
awk
しかし、まだ解決策を忘れないでください。