Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何在unix上逐行读取一个文件并将其拆分为两个文件_Shell_Unix_Awk_Sed_Sh - Fatal编程技术网

Shell 如何在unix上逐行读取一个文件并将其拆分为两个文件

Shell 如何在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 首先我需要检查一下 内联==$(切割

我有一个输入文件,我需要读取并应用一些条件并路由到另外两个文件

我的输入文件company.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