按目录分隔grep的输出

时间:2018-01-05 23:12:55

标签: bash split grep gawk

除了手动执行此操作以将grep的输出与其来自的目录/文件分开之外,还有其他快速方法吗?

行/输出示例:

  C:/files/yeah1.txt:eaaakkkakaka:eeeaaa
  C:/files/yeah1.txt:iemeirmeiemime:eomeonefneinee
  C:/files/yeah1.txt:eanfienierniene:eoneofneoneo
  C:/files/yeah23.txt:ienfienienein:eingieniene
  C:/files/nowayexample1.txt:49ng49n9n49n393n:g93nm9n39n33
  C:/files/yeadddddddddh1.txt:tg93n93n393n93n3:349n39n39n3

所以我想要的是,如果来自yeah1.txt的输出进入与yeah23.txt不同的输出文件,依此类推。

1 个答案:

答案 0 :(得分:1)

使用awk:

awk -F ':' '{n=split($2,a,"/"); print >a[n]}' file

这会创建四个文件:

yeah23.txt
yeah1.txt
yeadddddddddh1.txt
nowayexample1.txt

文件yeah1.txt包含,例如:

C:/files/yeah1.txt:eaaakkkakaka:eeeaaa
C:/files/yeah1.txt:iemeirmeiemime:eomeonefneinee
C:/files/yeah1.txt:eanfienierniene:eoneofneoneo
  

我解释它如何与第一行一起使用:

     

C:/files/yeah1.txt:eaaakkkakaka:eeeaaa

  

首先awk将您的行与分隔符:分成四部分:

     

$1C

     

$2/files/yeah1.txt

     

$3eaaakkkakaka

     

$4eeeaaa

  

接下来,n=split($2,a,"/")$2/files/yeah1.txt)与分隔符/分成三个部分分配到数组a,并将数组元素的数量写入变量{{ 1}}。数组n包含:

     

a:没有,因为在第一个分隔符之前没有任何内容

     

a[1]a[2]

     

filesa[3]

     

我认为yeah1.txt中的路径深度可能会有所不同,因此我没有使用$2而是a[3]a[n]始终包含数组a[n]的最后一个元素(此处为:a)。

  

最后一步,yeah1.txt将整行写入名称位于最后一个数组字段(print >a[n])的文件中。