![awk를 사용하여 열을 추가하는 중에 문제가 발생했습니다.](https://linux55.com/image/54270/awk%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%97%B4%EC%9D%84%20%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94%20%EC%A4%91%EC%97%90%20%EB%AC%B8%EC%A0%9C%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
다음을 사용하여 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