awk를 사용하여 열을 추가하는 중에 문제가 발생했습니다.

awk를 사용하여 열을 추가하는 중에 문제가 발생했습니다.

다음을 사용하여 CSV 파일에 열을 추가하려고 합니다.

awk -F "," '{print $0"new_col"}' file.csv

하지만 나는 다음을 얻습니다.

new_col8,0.405,0.101
new_col4,0.374,0.100
new_col23,0.342,0.100
new_col130,0.298,0.100

바꾸다:

68,110,0.362,0.101,new_col
11,98,0.405,0.101,new_col
57,94,0.374,0.100,new_col
61,123,0.342,0.100,new_col
124,130,0.298,0.100,new_col

나는 또한 이것을 시도했습니다 :

awk -F "," '{{$(NF+1)=",new_col"} print $0 }' file.csv

그러나 나는 같은 결과를 얻었습니다!

이미 이 문제를 겪은 사람이 있나요?

답변1

입력 csv파일은 DOS 형식입니다. Microsoft DOS/Windows는 각 줄 끝에 캐리지 리턴 문자( \r, ^M, ASCII 코드 13)와 개행 문자( \n또는 ASCII 코드 10)를 사용하는 반면, Linux/Unix는 개행 문자만 사용합니다.^J

이 문제를 해결하려면 다음을 실행하세요.

$ dos2unix file.csv
dos2unix: converting file file.csv to Unix format ... 
$ awk '{print $0",new_col"}' file.csv

앞의 쉼표를 참고하세요 new_col. 그것이 없으면 의 끝에 직접 print연결됩니다 . 입력 행을 필드로 분할하는 것이 아니라 단지 를 사용하기 때문에 필드 구분 기호( )를 표현할 필요가 없습니다 .new_col$0-F$0

답변2

DOS 형식 의 경우 .csv다른 옵션은 다음과 같습니다.

tr -d \\r <input.csv | sed 's/$/,new_col/'

...이렇게 하면 모든 문제가 한 번에 해결됩니다.

답변3

이것이 작동할까요? awk -F, '{$(NF+1)="new_col";}1' OFS=, input.txt.

그러면 명령줄에 새 테이블이 출력됩니다. 예제에서는 출력 파일을 추가했습니다( output.csv만일의 경우).

명령을 실행하기 전에:

$ cat input.csv
68,110,0.362,0.101
11,98,0.405,0.101
57,94,0.374,0.100
61,123,0.342,0.100
124,130,0.298,0.100

주문 실행:

$ awk -F, '{$(NF+1)="new_col";}1' OFS=, input.csv > output.csv

출력 파일을 확인합니다.

$ cat output.csv
68,110,0.362,0.101,new_col
11,98,0.405,0.101,new_col
57,94,0.374,0.100,new_col
61,123,0.342,0.100,new_col
124,130,0.298,0.100,new_col

샘플 페이지

관련 정보