$ stat -c "%Y#%n#%y" * | awk -F'#' "BEGIN {OFS=\"|\"} NR==1,NR==3 {print \$2 \$3}"
directory1/Blum2017-12-22 22:33:38.644178442 -0500
dir2/Ciolli2017-12-22 21:53:51.769368496 -0500
Dar2017-12-06 13:29:37.698296879 -0500
입력 및 출력 필드 구분 기호를 설정하려고 합니다.
입력 구분 기호로 사용하고 있지만
#
파일 이름에#
.stat
출력 경로 이름을 as로 구분할 수 있는지 , 입력 필드 구분 기호가 허용되는지 여부는 알 수 없습니다./null
find
awk
\null
내 설정이 작동
OFS
하지 않는 이유는 무엇입니까|
?
감사해요.
답변1
stat -c "%Y/%n/%y" * | awk -F'/' 'NR==1,NR==3 {print $2"|"$3}'
또는:
stat -c "%Y/%n/%y" * | awk -F'/' 'BEGIN {OFS="|"} NR==1,NR==3 {print $2,$3}'
설명하다:
#
/
(디렉토리 구분 기호) 는 파일 이름의 일부가 될 수 없으므로 대신 사용할 수 있습니다 .
입력 awk
필드 구분 기호는 그에 따라 설정되어야 합니다: -F'/'
.
이미 댓글에서 지적했듯이@스틸드라이버에서는 출력 필드 구분자를 선택하는 두 가지 방법이 있습니다.
- 문자열 연결 사용:
print $2"|"$3
. OFS="|"
그런 다음 정의하십시오print $2,$3
.
저는 큰 따옴표 '
대신 작은 따옴표를 선택했습니다 "
. 그러면 이 경우 이스케이프 필요성이 줄어듭니다.
고쳐 쓰다:
이제 질문에서는 stat
출력에 디렉터리 구분 기호가 포함될 수 있다고 지정하므로 /
레코드 구분 기호에 대한 현명한 선택은 아닙니다. 내가 아는 한, 파일 이름에 허용되지 않는 유일한 문자는 이지만 NUL
, 적어도 이 경우에는 그 사용에 문제가 있습니다. 내 제안은 파일 이름의 일부로 발견될 가능성이 없는(허용되기는 하지만) 어색한 문자열을 구성하는 것입니다. 놀랍게도 \x0
(의 표현 NUL
)이 좋은 선택일 수 있습니다.
stat -c "%Y\x0%n\x0%y" * | awk -F\x0 'BEGIN {OFS="|"} NR==1,NR==3 {print $2"|"$3}'