Опустить n-ые первые строки в awk, но оставить их в выходных данных - PullRequest
0 голосов
/ 22 октября 2018

У меня есть табличный файл, состоящий из табличных данных и заголовка, который я должен хранить во время рабочего процесса, и который все усложняет.Мне было интересно, есть ли какой-нибудь способ пропустить n-ые первые строки в файле, использовать awk (например, для фильтрации столбцов) и снова добавить их в окончательный вывод.

Возможное решение (но немногоСложно, я думаю) создать временный файл с заголовком, сделать awk 'NR>10 {command}' и после добавления заголовка снова ... что-то вроде этого:

head -10 file > header_tmp.txt
awk 'NR>10 {$5 ~ /\//; print}' file | cat header_tmp.txt - > final_file

Может быть, есть еще более хитрое решение?

1 Ответ

0 голосов
/ 22 октября 2018

С помощью awk вы можете использовать ключевое слово NR и сделать что-то вроде этого:

awk 'NR<50{print}NR>=50{<code for lines >=50>}'

или

awk 'NR<50{print;next;}{<codes for lines >=50>}'

Пример: я хочу сохранить 3 первые строки, суммы значений дляостальные.

Ввод:

Hello World1
Hello World2
Hello World3
1;2;3;4
5;6;7;8

Код:

awk -F';' 'NR<4{print;next}{result=0;for(i=1;i<=NF;i++){result += $i}; print result}' test.txt

Результат:

Hello World1
Hello World2
Hello World3
10
26

Проще на примере, который выпри условии:

awk -F\; 'NR<=10;(NR>10)&&($5 ~ /\//)' file

напечатает первые десять строк и все остальные строки, где $ 5 удовлетворяет /\//

...