$ 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
我尝试设置输入和输出字段分隔符。
我使用
#
作为输入分隔符,但文件名可以包含#
.还有更好的选择吗?我不知道是否可以按asstat
分隔输出路径名以及是否可以接受输入字段分隔符。/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'/'
。
正如评论中已经指出的@steeldriver,您有两种选择输出字段分隔符的方法。
- 使用字符串连接:
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}'