gpt4 book ai didi

regex - 如何在正则表达式中使用 awk for 循环的索引

转载 作者:行者123 更新时间:2023-12-03 22:54:32 25 4
gpt4 key购买 nike

我把问题缩短了。实际上我有比这更长的数据。

我有一个文件,如:

aa, bb, cc, dd, ee, 4
ff, gg, hh, ii, jj, 5
kk, ll, mm, nn, oo, 3
pp, qq, rr, ss, tt, 2
uu, vv, ww, xx, yy, 5
aa, bb, cc, dd, ee, 2

现在我想使用 awk 选择最后一列中具有相同编号的每一行并将其重定向到一个新文件中,这些新文件将根据最后一列中的数字而有所不同。
例如。 t2.txt, t3.txt, t4.txt, t5.txt 将分别保存最后一个数字为 2,3,4,5 的行。

在 t2.txt 中:
pp, qq, rr, ss, tt, 2
aa, bb, cc, dd, ee, 2

在 t3.txt 中:
kk, ll, mm, nn, oo, 3

在 t4.txt 中:
aa, bb, cc, dd, ee, 4

在 t5.txt 中:
ff, gg, hh, ii, jj, 5
uu, vv, ww, xx, yy, 5

我想我需要这样的东西:
BEGIN   {FS=","}
{
for (n=2; n<=5; n++)
if ($6 ~/\$n/) {print > "t\$n.txt"}
}

但我只是不知道如何使它工作。

这个 bash 文件做我想做的,但问题是,每次它提取具有特定数字的行时,它必须读入所有行。如何检查文件的唯一时间并提取所有数字的文件?
#!/bin/bash
for num in {2..5}; do
gawk --assign FS="," "\$6 ~/${num}/" infile >> t${num}.txt
done

最佳答案

尝试使用下一个命令:

awk '{ print $0 > ("t" $NF ".txt") }' infile

不用改 FS ,因为它默认为空格字符。您可以使用 NF 立即访问最后一个字段多变的。

注意:文件名字符串连接需要用括号括起来,否则 awk 会因非法语法而混淆。

关于regex - 如何在正则表达式中使用 awk for 循环的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9791106/

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