다음을 사용하여 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