awk - awk 从列 $3 创建多个包含模式和名称的文件
问题描述
你好,我想根据上一个问题扩展想法,对于生成的文件和包含模式“START”的文件,每个文件都包含当前日期的 $3 列的名称
输入文件1
START
A B 25276 FX M.1 20200421
A B 25276 FX M.1 20200328
A B 25276 FX M.1 20200328
A B 25276 FX M.1 20200328
A B 25276 FX M.1 20200328
A B 25276 FX M.1 20200328
A B 25276 FX M.1 20200423
A B 25276 FX M.1 20200423
A B 25276 FX M.1 20200423
A B 25276 FX M.1 20200423
A B 25276 FX M.1 20200423
A B 25276 FX M.1 20200423
END
START
A B 25060 FX M.1 20200421
END
START
A B 25172 FX M.1 20200421
END
START
A B 25320 FX M.1 20200429
A B 25320 FX M.1 20200421
A B 25320 FX M.1 20200429
A B 25320 FX M.1 20200423
END
START
A B 25173 FX M.1 20200427
A B 25173 FX M.1 20200504
A B 25173 FX M.1 20200429
END
输出将是这个多个文件,例如。
x_name_25276_20200517
x_name_25060_20200517
...
..
例如,生成的文件将包含:
猫 x_name_25276_20200517
START
A B 25276 FX M.1 20200421
A B 25276 FX M.1 20200328
A B 25276 FX M.1 20200328
A B 25276 FX M.1 20200328
A B 25276 FX M.1 20200328
A B 25276 FX M.1 20200328
A B 25276 FX M.1 20200423
A B 25276 FX M.1 20200423
A B 25276 FX M.1 20200423
A B 25276 FX M.1 20200423
A B 25276 FX M.1 20200423
A B 25276 FX M.1 20200423
END
没有找到太多示例如何仅通过以下部分实现此目的
awk '/^START/{if (f) close(f); f = "file" ++i} {print > f}'
解决方案
$ awk -v date="$(date +%Y%m%d)" '
s && NF>2 {s=""; f=FILENAME "_" $3 "_" date; print s0 > f}
f {print > f}
/^END/ {close(f); s=f=""}
/^START/ {s=1; s0=$0}' file