Shell 如何在unix上逐行读取一个文件并将其拆分为两个文件
我有一个输入文件,我需要读取并应用一些条件并路由到另外两个文件 我的输入文件company.txtShell 如何在unix上逐行读取一个文件并将其拆分为两个文件,shell,unix,awk,sed,sh,Shell,Unix,Awk,Sed,Sh,我有一个输入文件,我需要读取并应用一些条件并路由到另外两个文件 我的输入文件company.txt 100ABC COMPANY 2pen9999out 2cow7777out 2goa7777out 100XYZ COMPANY 2car9999out 2cow7777out 2HAT7777out 2BAL9999out 这里,以1开头的记录是标题,以2开头的记录是细节 我需要创建两个文件100ABC.txt和100XYZ.txt 首先我需要检查一下 内联==$(切割
100ABC COMPANY
2pen9999out
2cow7777out
2goa7777out
100XYZ COMPANY
2car9999out
2cow7777out
2HAT7777out
2BAL9999out
这里,以1开头的记录是标题,以2开头的记录是细节
我需要创建两个文件100ABC.txt和100XYZ.txt
首先我需要检查一下
内联==$(切割-f 0-1$行)
compnayName==$(切割-f 4-6$行)
输出:100ABC.txt
2cow7777out
2goa7777out
同时,我需要检查下一家公司XYZ
如果[$inline-eq“1”`]和$compnayName=“XYZ”
if(记录从2开始,位置4到8的值类似于7777)
如果是,请在100XYZ.txt中发送它们
比如XYZ.txt
2cow7777out
2HAT7777out
尝试:
运行此命令后,目录中将有两个新文件:
$ ls
100ABC.txt 100XYZ.txt company.txt
这些文件将包含以下内容:
$ cat 100ABC.txt
2cow7777out
2goa7777out
以及:
工作原理
/^1/{close(f);f=$1.txt}
如果当前行以1
开头,则关闭文件f
(如果存在),并为f
分配一个新值,该值由第一个字段和.txt
组成/^2…7777/{print>f}
如果当前行以2…777
开头,其中
匹配任何字符,则将当前行打印到文件f
超级性感的解决方案,我喜欢:-)谢谢Shello john,谢谢您的回复。但我想要准确地抓取值,例如,从位置4到8的7777,我只给出了示例文件。任何advise@jcrshankar好啊请澄清。你抓到它后想用它做什么?结果和我展示的有什么不同?你好,约翰,我已经添加了一个问题,有更多细节,请马上检查
$ ls
100ABC.txt 100XYZ.txt company.txt
$ cat 100ABC.txt
2cow7777out
2goa7777out
$ cat 100XYZ.txt
2cow7777out
2HAT7777out