gpt4 book ai didi

variables - AWK 传递循环变量

转载 作者:行者123 更新时间:2023-12-02 16:00:11 27 4
gpt4 key购买 nike

所以我有这个包含时间戳的文件。

cat file
2022/01/27-00:47:05;2022/01/27-00:47:05;
2022/01/27-00:47:06;2022/01/27-00:47:06;
2022/01/27-00:48:59;2022/01/27-00:48:59;
2022/01/27-01:38:06;2022/01/27-01:38:06;
2022/01/27-01:45:17;2022/01/27-01:45:17;
2022/01/27-01:47:46;2022/01/27-01:47:47;
<bunch of lines>
2022/01/27-15:00:01;2022/01/27-15:00:01;
2022/01/27-15:00:05;2022/01/27-15:00:05;
2022/01/27-15:00:06;2022/01/27-15:00:06;

我试图创建一个 for 循环来隔离第一个字段为 2022/01/27-hour: 的所有行。

到目前为止,这是我想出的,但它不起作用:

for var in {00..23}
do
awk -F ';' -v var="$var" '$1 ~2022/01/27-var"' file > $var.txt
done

我没有得到任何输出。

而试图完成的是获取 24 个文件,其内容是每小时时间戳。

00.txt:第一个字段匹配 2022-01-27-00

的所有行

01.txt:第一个字段匹配 2022-01-27-01

的所有行

……/……

23.txt:第一个字段匹配 2022-01-27-23

的所有行

我显然遗漏了什么,但我不知道是什么,因为其他东西似乎工作得很好。

for kk in {00..23}
do
echo | awk -v kk="$kk" '{print kk}'
done
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23

我必须以错误的方式传递变量。

如有任何帮助,我们将不胜感激。

最佳答案

假设:

  • 所有行都以日期时间戳开头,例如 YYYY/MM/DD-HH:
  • 日期时间戳可能涵盖多天,但输出文件仍然仅基于 HH (即,每个 HH.txt 文件可以包含不同日期的数据)

一个GNU awk无需 bash 的想法循环:

awk -F'[-:]' '{print $0 > $2".txt"}' file

注意事项:

  • -F'[-:] - 定义两个输入字段分隔符(-:)
  • 使用字段 #2 作为输出文件名称的前缀
  • 我们讨论的是最多 24 个输出文件,因此应该没有打开文件描述符数量最大化的问题

对于给定的样本输入(没有 <bunch of lines> 行)这会生成:

$ for fname in {00..23}.txt; do [[ -f "${fname}" ]] && echo "########### $fname" && cat $fname; done
########### 00.txt
2022/01/27-00:47:05;2022/01/27-00:47:05;
2022/01/27-00:47:06;2022/01/27-00:47:06;
2022/01/27-00:48:59;2022/01/27-00:48:59;
########### 01.txt
2022/01/27-01:38:06;2022/01/27-01:38:06;
2022/01/27-01:45:17;2022/01/27-01:45:17;
2022/01/27-01:47:46;2022/01/27-01:47:47;
########### 15.txt
2022/01/27-15:00:01;2022/01/27-15:00:01;
2022/01/27-15:00:05;2022/01/27-15:00:05;
2022/01/27-15:00:06;2022/01/27-15:00:06;

关于variables - AWK 传递循环变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70881739/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com