파일에 열(두 번째 위치)을 추가하고 .csv
해당 열의 값을 문자열로 인용하고 싶습니다.
다음 명령은 따옴표 없이 열을 추가합니다.
awk -F"," 'BEGIN { OFS = "," } {$2="2.4.0"; print}' test.csv > output.csv
다음 방법은 따옴표를 병합하지만 어떤 이유로 .
값에서 마지막 점(점)을 제거합니다.
awk -F"," 'BEGIN { OFS = "," } {$2="\""2.4.0"\""; print}' test.csv > output.csv
따라서 내 값은 "2.40"이 됩니다.
나는 무엇을 해야 합니까?
답변1
따옴표를 잘못 입력하신 것 같습니다. 다음과 같이 해야 합니다.
awk -F"," 'BEGIN { OFS = "," } {$2="\"2.4.0\""; print}' test.csv > output.csv
이것은GNU awk 매뉴얼 페이지 - 3.2 이스케이프 시퀀스
("foo")
특정 문자는 문자열 상수 나 정규식 상수( ) 에 문자 그대로 포함될 수 없습니다/foo/
. 대신\
백슬래시( )로 시작하는 문자 시퀀스 인 이스케이프 시퀀스로 표시해야 합니다 . 이스케이프 시퀀스의 한 가지 용도는 문자열 상수에 큰따옴표 문자를 포함하는 것입니다. 일반 큰따옴표는 문자열을 끝내기 때문에\"
실제 큰따옴표 문자를 문자열의 일부로 나타내는 데 사용해야 합니다 .
동작의 이유를 이해할 수 있는 한, OP의 추가 따옴표가 있는 숫자 단어로 awk
해석되어 2.4.0
첫 번째 지점 이후 정밀도를 잃기로 결정한 것 같습니다.
즉
$2="\""2.4.0"\""
정의로워지다
$2=""2.4.0""
awk
더 이상 문자열로 이해되지 않습니다 . 다음을 수행하면 이 동작을 재현할 수 있습니다.
awk 'BEGIN { print ""2.4.0"" }'
2.40
이렇게 하면 결과는 이렇게 된다
awk 'BEGIN { print 2.4.0 + 0 }'