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