![파일에서 쉼표 뒤의 쉼표와 문자열을 제거하는 방법은 무엇입니까?](https://linux55.com/image/129895/%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%89%BC%ED%91%9C%20%EB%92%A4%EC%9D%98%20%EC%89%BC%ED%91%9C%EC%99%80%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%A0%9C%EA%B1%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음과 같이 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