在awk中增加字母变量

5

在像这样的脚本中,用于按字符串拆分大文件:

awk  '/MYSTRING/ {n++}{print >"out_" n ".txt" }' LARGEFILE

该命令会产生out_1.txt, out_2.txt等文件。

如何获得类似split命令生成的带字母前缀的文件名(例如out_aa.txt, out_ab.txt, out_ac.txt, ...)?

谢谢。

2个回答

10

这并不十分直观,所以请允许我在这里使用一些模运算,就像这样:

awk '/MYSTRING/ {n++} {p=97+int(n/26); q=(n%26)+97; s=sprintf("out_%c%c.txt", p, q); print > s}' LARGEFILE

1
这是个好东西 @anubhava!! +1 - jaypal singh
1
+1,我以为使用花括号扩展会更容易,但我错了。 - Kent
1
很好!顺便说一下,我认为你多了一个 ' - potong
感谢 @potong:已经纠正了。我也喜欢你提供的替代方法。 - anubhava

0
这个可能适合你:
awk  -vv "$(echo {a..z}{a..z})" 'BEGIN{split(v,a);n++} /MYSTRING/ {n++}{print >"out_" a[n] ".txt" }' LARGEFILE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接