在特定csv列的grep中包含标头

时间:2016-09-27 15:02:10

标签: bash csv grep

我正在尝试从大型csv文件中提取相关信息以进行进一步处理,因此我希望在我的输出mini-csv文件中保存列名(标题)。

我有:

grep "Example" $fixed_file | cut -d ',' -f 4,6 > $outputpath"Example.csv"

在生成具有两列的csv文件时工作正常,但我希望标题信息也包含在输出文件中。

2 个答案:

答案 0 :(得分:0)

使用命令分组并将head -1添加到混音:

{ head -1 "$fixed_file" && grep "Example" "$fixed_file" | cut -d ',' -f 4,6 ;} \
         >"$outputpath"Example.csv

答案 1 :(得分:0)

我的建议是用一个awk脚本替换你的多命令管道。

"position": {
  "interpolationAlgorithm": "LAGRANGE",
  "interpolationDegree": 1,
  "epoch": "2012-08-04T16:00:00Z",
  "cartographicDegrees": [
    //time, lat, long, alt
    0,-116.52,35.02,80,
    300,-116.52,35.04,4000,
    600,-116.52,35.08,9000,
    900,-116.52,35.02,3000,
    1100,-116.52,35.02,1000,
    1400,-116.52,35.02,100
  ]

}

如果您希望标题仅包含标题字段字段4和6,则可以将其更改为:

awk '
  BEGIN {
    OFS=FS=","
  }

  NR==1;

  /Example/ {
    print $4,$6
  }
' "$fixed_file" > "$outputpath/Example.csv"

Awk脚本由awk ' BEGIN { OFS=FS="," } NR==1 || /Example/ { print $4,$6 } ' "$fixed_file" > "$outputpath/Example.csv" 对组成。缺少的语句假设您要打印该行(这就是condition { statement }打印标题的原因。)

当然,你可以把它压成一个单行:

NR==1;