2010-12-13 3 views
3

У меня есть огромный файл, который мне нужно проанализировать. То, что я хочу сделать, это разделить те строки, которые имеют определенные значения в определенном столбце. Таким образом, это похоже на выбор только тех данных, которые относятся к определенной категории. Как это может быть достигнуто с помощью простой комбинации bash или скрипта.Bash: как выбрать строки из файла с определенным значением в столбце

Например, я хочу отделить только те строки, которые имеют значения 1, 2 3 или 4 в 8-й колонке. Файл ограничен пространством.

ответ

4

Вы можете использовать AWK как:

awk '$8 == 1 || $8 == 2 || $8 == 3 || $8 == 4' file 
+0

спасибо, должен узнал AWK. Кажется, это удобно :). – sfactor

+0

Как насчет файла gzipped и мне нужно gunzip -c file | ...? Я не мог запустить awk-метод в трубе. – Ash

+0

В случае, если входной файл gzipped: gunzip -c input.gz | awk 'BEGIN {FS = "\ t"} $ 5 == "en" || $ 13 == "en" '| gzip> output.gz – Ash

3

Использование AWK:

awk '$8 >= 1 && $8 <= 4' your_file.txt 
2

еще один AWK ответ.

awk '$8 ~ /[1-4]/' file 

Но, только для некоторого разнообразия, Баш ответ

while read line ; do 
    fields=($line) 
    [[ ${fields[7]} =~ [1-4] ]] && echo $line 
done < file 
3

Еще один AWK ответ:

awk '$8 ~ /1|2|3|4/' inputfile 
Смежные вопросы