次のように、10000行と17列のファイルがあります。
Chr17 43633894 0.5 3.0103 2386 14.9269 6.85401 41.0732 42.8984 953 80848 9.41879 24.1244 26 11.961 87.4669 random1_1000
Chr17 45194841 0.401235 16.7362 2626 4.75178 3.2041 58.5842 59.7521 3534 93081 3.2038 59.9018 52 54.6311 3.08007 random1_1000
一部の列の一部の行には、次の行(たとえば、3番目と4番目の列)のように、カンマ「、」で区切られた値の代わりに2つの値があります。
Chr11 38465225 0.523952,0.5 4.67466,3.0103 2662 4.06441,3.73412 6.21149 53.0049,55.4167 58.8243 7269,408 92146 73.8888,21.1059 46.0485 62,1 4.06441,3.0103 3.8106 MAP_outliers
私のファイルからこれらのコンマをすべて見つけて、コンマとそれに続く値を削除して、次のような出力を取得したいと思います。
Chr11 38465225 0.523952 4.67466 2662 4.06441 6.21149 53.0049 58.8243 7269 92146 73.8888 46.0485 62 4.06441 3.8106 MAP_outliers
どうすればいいのかご存知ですか?
答え1
使用sed
sed 's/,[^[:blank:]]*//g' infile
空白以外のすべての項目に一致するすべての項目が続くカンマを削除します。
答え2
そしてawk
:
awk '{for (i=1; i<=NF; ++i) {gsub(",[0-9].*", "", $i)}}; 1'
for (i=1; i<=NF; ++i)
フィールド番号の繰り返し{gsub(",[0-9].*", "", $i)}
カンマの後のすべての項目を数字に置き換え、すべての項目をnullに置き換えます。これは内部作業です。
例:
% awk '{for (i=1; i<=NF; ++i) {gsub(",[0-9].*", "", $i)}}; 1' <<<'Chr11 38465225 0.523952,0.5 4.67466,3.0103 2662 4.06441,3.73412 6.21149 53.0049,55.4167 58.8243 7269,408 92146 73.8888,21.1059 46.0485 62,1 4.06441,3.0103 3.8106 MAP_outliers'
Chr11 38465225 0.523952 4.67466 2662 4.06441 6.21149 53.0049 58.8243 7269 92146 73.8888 46.0485 62 4.06441 3.8106 MAP_outliers