我通常使用原始或csv文件,这些文件具有唯一的标识符,我可以在各种数学程序中使用。最近,我得到了一个文件夹,里面的文件唯一的方法是通过它们在文本文件中的位置来匹配记录。
下面是一个示例File01.txt:
AA1000
AA2222
AB1X6110305126101234760ABA08B88 ZZ1111110000
AB2X611030512612006100901C109Z 001110001110
AB2X611030512612006100901X571Z 007410000000
AB1X6110305127101234760ABA10B89 ZZ1111110022
AB2X611030512712006101001A571Z 007410000000
AB1X6110305128101234760ABA10C00 ZZ1111110055
AB2X611030512812006101001A571Z 007410007410
AC11
第3行以AB1开头,第4-8行以AB2开头,与第3行相对应,如从第4行开始的12个字符串所示。12个字符的字符串是匹配集群的唯一方法,但它不一定在所有行中都是唯一的。了解4-8中的AB2组与第3行中的AB1组对应的唯一方法是第4-8行跟随第3行。对于我这样的非程序员来说,这是一场噩梦。
我想做的是在File01.txt中读取并逐行循环,直到它到达AB1行。我想存储AB1线,然后继续循环。AB1行后面总是跟至少一个AB2行。我想将AB2行写入数组,并从内存中追加AB1行,然后继续循环和写入数组,直到遇到新的AB1行。新的AB1行现在将存储在内存中,并按上面的操作,直到下一个AB1行,依此类推,直到它到达文件的末尾(通常是AC11行)
我希望输出文件可以如下所示:
AB2X611030512612006100901C109Z 001110001110 AB1X6110305126101234760ABA08B88 ZZ1111110000
AB2X611030512612006100901X571Z 007410000000 AB1X6110305126101234760ABA08B88 ZZ1111110000
AB2X611030512712006101001A571Z 007410000000 AB1X6110305127101234760ABA10B89 ZZ1111110022
AB2X611030512812006101001A571Z 007410007410 AB1X6110305128101234760ABA10C00 ZZ1111110055
虽然不是很理想,但我可以处理这种类型的数据并分割字符串等。这可能使用bash和awk或sed之类的东西吗?
提前感谢您提供的任何帮助/见解。
最佳答案
如果我对你的要求正确,这个小awk程序将工作:
awk '/^AB1/{ab1=$0;next}/^AB2/{print $0, ab1}'
这对任何不以AB1或AB2开头的行都没有任何作用,并且无法检查AB1/AB2后面的12个字符串是否相等。我不知道你是否需要那张支票。
关于regex - Bash:逐行循环遍历文件,找到特定的字符串并追加到每个后续行,直到找到相同的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17915200/