【问题标题】:How to read one by one line from ONE file at unix and split into two files如何在 unix 上从 ONE 文件中逐行读取并拆分为两个文件
【发布时间】:2018-06-03 19:55:30
【问题描述】:

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

我的输入文件,company.txt

100ABC COMPANY          
2pen9999out
2cow7777out
2goa7777out
100XYZ COMPANY 
2car9999out
2cow7777out
2HAT7777out
2BAL9999out

这里,以 1 开头的记录是标题,2 是详细信息

我需要创建两个文件 100ABC.txt 和 100XYZ.txt?

首先我需要检查

内联= =$(cut -f 0-1 $line) compnayName= =$( cut -f 4-6 $line)

if [ $inline -eq "1"` ] and $compnayName="ABC"
 if(record start with 2 and  position 4 to 8 has value like 7777)
    if yes,  route them in 100ABC.txt

输出:100ABC.txt

2cow7777out
2goa7777out

同样,我需要检查下一家公司 XYZ,

如果 [ $inline -eq "1"` ] 和 $compnayName="XYZ" if(记录从 2 开始,位置 4 到 8 的值类似于 7777) 如果是,请将它们路由到 100XYZ.txt

喜欢 XYZ.txt

 2cow7777out
 2HAT7777out

【问题讨论】:

    标签: shell unix awk sed sh


    【解决方案1】:

    试试:

    $ awk '/^1/{close(f); f=$1 ".txt"} /^2...7777/{print>f}' company.txt
    

    这条命令运行后,目录下会新增两个文件:

    $ ls
    100ABC.txt  100XYZ.txt  company.txt
    

    文件将包含内容:

    $ cat 100ABC.txt 
    2cow7777out
    2goa7777out
    

    还有:

    $ cat 100XYZ.txt 
    2cow7777out
    2HAT7777out
    

    工作原理

    1. /^1/{close(f); f=$1 ".txt"}

      如果当前行以1 开头,则关闭文件f(如果存在)并为f 分配一个新值,该值由第一个字段后跟.txt 组成。

    2. /^2...7777/{print>f}

      如果当前行以2...777 开头,其中. 匹配任何字符,则将此当前行打印到文件f

    【讨论】:

    • 超级性感的解决方案,我喜欢 :-) 谢谢
    • 你好约翰,感谢您的回复。但我想准确地从位置 4 到 8 抓取值,例如 7777,我只给出了示例文件。任何建议
    • @jcrshankar 好的。请说清楚。 你抓住它之后你想用它做什么?结果与我显示的有何不同?
    • 你好约翰,我在stackoverflow.com/questions/48018230/…添加了更多细节问题,请检查一次
    猜你喜欢
    • 2019-05-14
    • 2013-09-08
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    相关资源
    最近更新 更多