디렉터리에는 다음 내용을 포함하는 많은 파일이 있습니다.
입력하다:
root 1324711901
sshd 1272725792
파일 내용을 다음으로 변환하는 방법에 대한 해결책을 찾고 있습니다.
출력 1:
filenameXXX.txt root 1324711901
filenameXXX.txt sshd 1272725792
출력 2:
filenameXXX.txt root Sat Dec 24 08:31:41 CET 2011
filenameXXX.txt sshd Sat May 1 16:56:32 CEST 2010
따라서 두 단계에는 두 가지가 필요합니다.
INPUT -> 첫 번째 열 앞의 "filenameXXX.txt" -> OUTPUT1
OUTPUT1 -> Unix 시간을 일반 시간으로 변환 -> OUTPUT2
bash, sed 또는 perl을 사용하여 이를 수행하는 방법은 무엇입니까? [모두 필요하지 않고 1개이면 충분합니다 :D]
어.. 두 부분으로 나누어야 합니다 [그래서 두 줄]:
- INPUT에서 OUTPUT1
- OUTPUT1에서 OUTPUT2
필드 구분 기호는 "\t" -s [ Label]입니다!
답변1
나는 gawk
이것을 선호한다:
awk -vOFS='\t' 'NF{$1=FILENAME OFS $1;$2=strftime("%c",$2)}1' filename.txt
이것은 perl
또한 대안입니다:
perl -nae 'print$ARGV,"\t",$F[0],"\t".localtime($F[1]),"\n"' filename.txt
또한 요청한 대로 bash
다음을 수행합니다.
while read -r who when; do
readlink -n /proc/$$/fd/0
echo -en "\t$who\t"
date -d "@$when"
done < filename.txt
의 경우 sed
입력 파일의 이름을 알 수 없고 날짜를 변환할 수 없기 때문에 사용하기 어렵고 이점이 무시할 수 있습니다.