在一个命令中连接几个awk命令输出

时间:2018-12-11 19:19:21

标签: parsing awk

**我有如下输入,其中包含很多行,我需要将所有文件解析为更好的格式,可能是CSV文件或JSON(可能在将来)。 因此,我需要产生一个以逗号分隔的列的结果,以为现在可以将内容导出为CSV文件。

获取名称文件

[{'Total Population:': 4585, 'Total Water Ice Cover': 2.848142234497044, 'Total Developed': 17.205368316575324, 'Total Barren Land': 0.22439908514219134, 'Total Forest': 34.40642126612868}, {'Total Population:': 4751, 'Total Water Ice Cover': 1.047783534830167, 'Total Developed': 37.27115716753022, 'Total Barren Land': 0.11514104778353484, 'Total Forest': 19.11341393206678}, {'Total Population:': 3214, 'Total Water Ice Cover': 0.09166603009701321, 'Total Developed': 23.50469788404247, 'Total Barren Land': 0.2597204186082041, 'Total Forest': 20.418608204109695}, {'Total Population:': 5005, 'Total Water Ice Cover': 0.0, 'Total Developed': 66.37545713124746, 'Total Barren Land': 0.0, 'Total Forest': 10.68671271840715}, ... ]

获取所有路径

library(tidyverse)

df %>% 
  mutate_if(is.numeric, ~format(., nsmall = 2)) %>% 
  unite("CI", c("low2.5", "up2.5"), sep = ", ", remove=T)
#    est           CI
#1  0.05  0.01,  0.09
#2 -0.16 -0.20, -0.12
#3 -0.02 -0.05,  0.00
#4  0.00 -0.03,  0.04
#5 -0.11 -0.20, -0.01
#6  0.15  0.10,  0.20
#7 -0.26 -0.30, -0.22
#8 -0.23 -0.28, -0.17

获取文件大小

awk '{ if($2 ~ /A/ ) print $1 }' dir_out

现在我有单独的命令来生成所需的结果,但是我必须找到一种方法将它们放在相同的awk命令行或脚本中。

我无法解决的关键问题之一是使结果的第1列成为界定该块中所有文件的每个块的路径。

所以我从此输入开始: **

awt ' /[\\]/ {print}'

ljkhlj

awk '{ if($3 ~ /^[0-9]/) print $3}'

2 个答案:

答案 0 :(得分:3)

这是将awk命令组合到单个脚本中的一种方法:

#!/bin/bash
awk '
$2 ~ /A/  {print $1; }  
/[\\]/    {print}
$3 ~ /^[0-9]/ {print $3}
' "$@"

通常,awk需要多个/ search / {command}对。如果/ search /丢失,则默认为所有行;如果{command}丢失,则默认为打印。

这是获得预期结果所需的其他逻辑:

#!/bin/bash
awk -v OFS=, '
BEGIN { print "PATH, FILENAME, SIZE, TIMESTAMP" }
/[\\]/    { path=$0 }
$2 ~ /A/  {print path,$1,$3,$4 " " $5 " " $6 " " $7 }  
' "$@"

答案 1 :(得分:2)

c:\xampp\mysql\bin>mysql -V
mysql  Ver 15.1 Distrib 10.1.28-MariaDB, for Win32 (AMD64)