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