awk -i inplace로 인해 파일이 비어 있게 됩니다.

awk -i inplace로 인해 파일이 비어 있게 됩니다.
168,1331122362,412482,,111,,3654

위의 CSV가 있고 두 번째 열은 타임스탬프입니다. 해당 타임스탬프를 날짜/시간 형식으로 변환해야 합니다. 다음 awk 문을 사용하고 있습니다.

awk -i inplace -F"," '{OFS=","; $2=strftime("%Y-%m-%d %H:%M:%S", $2);}' file.csv

inplace 옵션을 제거하고 "print$0"을 추가하면 예상대로 작동하지만 inplace 옵션을 사용하여 이 작업을 수행하면 csv 파일이 지워집니다. 주위를 둘러보았지만 비슷한 문제를 가진 사람을 찾지 못했기 때문에 내 진술에 뭔가 문제가 있다고 가정하고 있지만 그게 무엇인지는 모르겠습니다. 어쩌면 제가 awk/sed에 전혀 익숙하지 않기 때문일 수도 있습니다.

답변1

-i inplaceGNU와 함께 사용하면 awk주어진 파일의 내부 편집을 수행하게 됩니다. 이는 awk파일에 다시 기록된 프로그램의 출력입니다. 프로그램이 아무것도 출력 하지 않으면 awk파일이 지워집니다(이것이 sed -iGNU 작동 방식 입니다 sed).

그러므로 당신은 사용해야합니다

awk -i inplace -F ',' '{ OFS=","; $2 = strftime("%Y-%m-%d %H:%M:%S", $2); print }' file.csv

OFS또는 각 입력 행에 대해 설정을 피하려면 다음을 수행하십시오 .

awk -i inplace -F ',' -v OFS=',' '{ $2 = strftime("%Y-%m-%d %H:%M:%S", $2); print }' file.csv

아니면 더 짧게,

awk -i inplace -F ',' -v OFS=',' '{ $2 = strftime("%F %T", $2) }; 1' file.csv

관련 정보