2011-01-03 4 views
2

В предположении, что входные CSV Следующий примерGrep по строкам и столбцам с использованием Баш

SYMBOL, ЯН-11, февраль-11, МАР-11
DEF, 20, 25, 20
HIG, 50, 50, 50

есть в любом случае, чтобы Grep для определенного значения, используя как строки и столбца т.е. Grep для символа DEF и FEB-11 должен возвращать значение 25

row-wise grep тривиально, но у меня проблемы с столбцом wise grep. любая помощь будет принята с благодарностью.

+3

grep - это совсем не тот инструмент. Попробуйте awk. –

ответ

4

Как @Ignacio Vazquez-Abrams сказал, awk - намного лучший инструмент для этой работы. Попробуйте использовать следующий сценарий:

#!/bin/awk -f 

# usage: csvgrep row column [file] 

BEGIN { 
    FS = "[ \t]*,[ \t]" 
    row = ARGV[1] 
    col = ARGV[2] 
    ARGV[1] = ARGV[2] = "" 

    # read header 
    getline 
    for (i=1; i<=NF; i++) 
     if ($i == col) { 
      col = i 
      break 
     } 
} 

($1 == row) { print $col } 

Возможно, вы захотите добавить проверку ввода. awk может быть /usr/bin в вашей системе.

+0

+1. Гораздо лучше, чем мой (удаленный) ответ. –

+0

+1 Вы можете легко сделать это в AWK-скрипте без оболочки оболочки. –

+0

@ Денис Уильямсон: хороший момент, сделано. –

Смежные вопросы