파일에서 쉼표 뒤의 쉼표와 문자열을 제거하는 방법은 무엇입니까?

파일에서 쉼표 뒤의 쉼표와 문자열을 제거하는 방법은 무엇입니까?

다음과 같이 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

일부 열의 일부 행에는 다음 행(예: 세 번째 및 네 번째 열)과 같이 쉼표 ","로 서로 구분된 값 대신 두 개의 값이 있습니다.

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

관련 정보