我不喜欢编写脚本,但在这个论坛的帮助下设法创建了一些脚本。遇到问题但无法使其工作(不确定是否可能)
我有一个包含内容的 fileY
lrwxrwxrwx 1 user1 gp 35 2021-09-07 2000 /folder/subfolder1/subfolder2/subfolder3/main/summary.txt
lrwxrwxrwx 1 user1 gp 35 2021-09-08 1400 /folder/subfolder1/subfolder2/main/summary.txt
lrwxrwxrwx 1 user1 gp 35 2021-09-09 1800 /folder/subfolder1/subfolder2/subfolder3/subfolder4/main/summary.txt
Run Code Online (Sandbox Code Playgroud)
我想输出第 3,6,7,8 列并与“main”之前的文件夹名称连接,如下所示
user1 2021-09-07 2000 /folder/subfolder1/subfolder2/subfolder3/main/summary.txt subfolder3
user1 2021-09-08 1400 /folder/subfolder1/subfolder2/main/summary.txt subfolder2
user1 2021-09-09 1800 /folder/subfolder1/subfolder2/subfolder3/subfolder4/main/summary.txt subfolder4
Run Code Online (Sandbox Code Playgroud)
我如何将下面的sed命令作为 awk 命令的 {print} 变量之一?
awk '{print $3,$6,$7,$8}' fileY
sed 's/\// /g; s/\./ /g' fileY | awk '{for(i=8;i<=NF;i++){if($i~/^main/){a=i}} print $(a-1)}'
Run Code Online (Sandbox Code Playgroud)
当您使用 awk 时,您永远不需要 sed。如果您想要的目录始终是路径中的第三个,如您的示例所示,那么您所需要的就是使用任何 awk:
$ awk '{print $3, $6, $7, $8, p[split($8,p,"/")-2]}' file
user1 2021-09-07 2000 /folder/subfolder1/subfolder2/subfolder3/main/summary.txt subfolder3
user1 2021-09-08 1400 /folder/subfolder1/subfolder2/main/summary.txt subfolder2
user1 2021-09-09 1800 /folder/subfolder1/subfolder2/subfolder3/subfolder4/main/summary.txt subfolder4
Run Code Online (Sandbox Code Playgroud)
否则使用 GNU awk 将第三个参数用于 match():
$ awk '{match($8,"([^/]+)/main/",a); print $3, $6, $7, $8, a[1]}' file
user1 2021-09-07 2000 /folder/subfolder1/subfolder2/subfolder3/main/summary.txt subfolder3
user1 2021-09-08 1400 /folder/subfolder1/subfolder2/main/summary.txt subfolder2
user1 2021-09-09 1800 /folder/subfolder1/subfolder2/subfolder3/subfolder4/main/summary.txt subfolder4
Run Code Online (Sandbox Code Playgroud)
或使用任何 awk:
$ awk '{match($8,"[^/]+/main/"); print $3, $6, $7, $8, substr($8,RSTART,RLENGTH-6)}' file
user1 2021-09-07 2000 /folder/subfolder1/subfolder2/subfolder3/main/summary.txt subfolder3
user1 2021-09-08 1400 /folder/subfolder1/subfolder2/main/summary.txt subfolder2
user1 2021-09-09 1800 /folder/subfolder1/subfolder2/subfolder3/subfolder4/main/summary.txt subfolder4
Run Code Online (Sandbox Code Playgroud)