[英]Use unix command inside awk commandline to process fields
有没有办法在 awk 单线中使用 unix 命令来做某事,并在 STDIN 上使用 output 的结果?
例如:
ls -lrt|awk '$8 !~ /:/ {system(date -d \"$6" "$7" "$8\" +"%Y%m%d")"|\t"$0}'
您正在解析ls
,这可能会导致几个问题。 当您尝试通过在其前面的 yyyymmdd 的最后修改来获取文件名顺序时,您可以查看
# not correct for some filenames
stat --format "%.10y %n" * | tr -d '-' | sort
对于带有-
的文件名,该解决方案失败。 解决这个问题的一种方法是使用
# Still not ok
stat --format "%.10y %n" * | sed -r 's/^(..)-(..)/\1\2/' | sort
对于带有换行符的文件名,这将失败。
touch -d "2019-09-01 12:00:00" "two
lines.txt"
显示了您也可以使用ls
看到的一些问题。
你应该如何解决这个问题取决于你的确切要求。
例子
find . -maxdepth 1 ! -name "[.]*" -printf '%TY%Tm%Td ' -print0 |
sed 's#[.]/##g'| tr "\n\0" "/\n" | sort
解释:
maxdepth 1
只查看当前目录. -name "[.]*"
. -name "[.]*"
忽略隐藏文件
-printf '%TY%Tm%Td '
YYYYMMDD 和空格
-print0
不要在每个结果的末尾使用\n
但 NULL
sed 's#[.]/##g'
去掉路径./
tr "\n\0" "/\n"
用 / 替换文件名中的换行符,用换行符替换 NULL
在排序之后你可能想要tr '|' '\n'
tr '|' '\n'
。
如果你想拥有命令的 output,你可以使用getline
:
kent$ awk 'BEGIN{"date"|getline;print}'
Fri 15 Nov 2019 10:51:10 AM CET
您还可以将 output 分配给 awk 变量:
kent$ awk 'BEGIN{"date"|getline v;print v}'
Fri 15 Nov 2019 10:50:20 AM CET
您正在尝试从ls
格式化日期 output 。
find
命令对日期和时间 output 具有广泛的控制。 使用-printf
操作。
例如这里:
$ ls -l
-rw-rw-r--. 1 cfrm cfrm 41 Nov 15 09:12 input.txt
-rw-rw-r--. 1 cfrm cfrm 67 Nov 15 09:13 script.awk
$ find . -printf "fileName=%f \t formatedDate-UTC=[%a] \t formatedDate-custom=[%AY-%Am-%Ad]\n"
fileName=. formatedDate-UTC=[Fri Nov 15 09:43:32.0222415982 2019] formatedDate-custom=[2019-11-15]
fileName=input.txt formatedDate-UTC=[Fri Nov 15 09:12:33.0117279463 2019] formatedDate-custom=[2019-11-15]
fileName=script.awk formatedDate-UTC=[Fri Nov 15 09:13:38.0743189896 2019] formatedDate-custom=[2019-11-15]
对于按时间戳排序,我们可以在时间戳标记上标记排序开始(以下示例中的[
)
$ find . -printf "%f timestamp=[%AY%Am%Ad:%AT]\n" |sort -t [
22114 timestamp=[20190511:10:32:22.6453184660]
5530 timestamp=[20190506:01:03:01.2225343480]
5764 timestamp=[20190506:01:03:34.7107944450]
.font-unix timestamp=[20191115:13:27:01.8699219890]
hsperfdata_artemis timestamp=[20191115:13:27:01.8699219890]
hsperfdata_cfrm timestamp=[20191115:13:27:01.8709219730]
hsperfdata_elasticsearch timestamp=[20191115:13:27:01.8699219890]
.ICE-unix timestamp=[20191115:13:27:01.8699219890]
input.txt timestamp=[20191115:09:12:33.1172794630]
junk timestamp=[20191115:09:43:32.2224159820]
script.awk timestamp=[20191115:09:13:38.7431898960]
systemd-private-1a6c51334d6f4723b46fe5ca51b632c6-chronyd.service-AoZvZM timestamp=[20190516:05:09:51.1884573210]
systemd-private-1a6c51334d6f4723b46fe5ca51b632c6-vgauthd.service-f2m9rt timestamp=[20190516:05:09:51.1884573210]
systemd-private-1a6c51334d6f4723b46fe5ca51b632c6-vmtoolsd.service-0CJ32C timestamp=[20190516:05:09:51.1884573210]
.Test-unix timestamp=[20191115:13:27:01.8699219890]
. timestamp=[20191115:13:26:56.8770048750]
.X11-unix timestamp=[20191115:13:27:01.8699219890]
.XIM-unix timestamp=[20191115:13:27:01.8699219890]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.