如何从unix的ONE文件中逐行读取并拆分为两个文件

问题描述 投票:1回答:1

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

我的输入文件company.txt

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

在这里,记录以1开头是标题,2是细节

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

首先,我需要检查

inline = = $(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,

if [$ inline -eq“1”`]和$ compnayName =“XYZ”if(记录以2开头,位置4到8的值如7777)如果是,则将它们路由到100XYZ.txt

像XYZ.txt

 2cow7777out
 2HAT7777out
shell unix awk sed sh
1个回答
2
投票

尝试:

$ 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

How it works

  1. /^1/{close(f); f=$1 ".txt"} 如果当前行以1开头,则关闭文件f(如果存在)并为f分配一个新值,该值由第一个字段后跟.txt组成。
  2. /^2...7777/{print>f} 如果当前行以2...777开头,其中.匹配任何任何字符,则将此当前行打印到文件f
© www.soinside.com 2019 - 2024. All rights reserved.