Как отследить два файла друг за другом, но пропустить последнюю / первую строку соответственно? - PullRequest
13 голосов
/ 30 августа 2010

У меня есть два файла, которые я хочу просмотреть вместе.Однако последняя строка первого файла и первая строка последнего файла должны быть пропущены.

Я уверен, что это можно сделать в оболочке UNIX (точнее, Cygwin).Но как?

Ответы [ 7 ]

15 голосов
/ 30 августа 2010
$ head --lines=-1 file1 > res
$ tail --lines=+2 file2 >> res
3 голосов
/ 30 августа 2010

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

head -n -1 file1 && tail -n +2 file2

head показывает первые строки файла, параметр -n показывает первые n строк файла, но если вы поставите - перед числом, он показывает весь файл, кроме последних n строк.

Хвост аналоговый ..

для лучшей справки:

человек head

человек tail

2 голосов
/ 30 августа 2010
awk 'FNR>2{print p}{p=$0}' file1 file2

Объяснение по запросу:

FNR - номер текущей записи текущего обрабатываемого файла.В начале каждой итерации строка сохраняется в переменной «p», но пока не распечатывается.Когда номер записи достигает 3, распечатывается переменная «p», которая содержит запись 2. Это означает 2-ю строку.Когда awk достигает конца файла, последняя строка не распечатывается, а затем переходит к следующему файлу.

2 голосов
/ 30 августа 2010
head -n -1 file1

напечатает все строки в file1, кроме последней.

tail -n +2 file2

напечатает все строки в file2, кроме первой.

Объедините два как:

head -n -1 file1 ; tail -n +2 file2
1 голос
/ 22 июля 2013

Я часто использую sed для головы | хвоста:

{ sed '$d' file1; sed '1d' file2; } > combined
1 голос
/ 22 июля 2013

Я не могу использовать следующую команду на моем Mac (точнее, в оболочке bash, запущенной в окне терминала в Mac OS X 10.7.5):

head -n -1 file1

Приведенная выше команда создаетследующее сообщение об ошибке:

head: illegal line count -- -1

Похоже, отрицательные значения параметра -n не принимаются в версии заголовка Mac OS X.Однако вместо этого вы можете использовать sed:

sed -e '$d' file1

[«tail -n +2 file2» работает, как описано выше в Mac OS X]

1 голос
/ 30 августа 2010

Следующий транскрипт показывает, как этого добиться:

pax> cat file1.txt
1.1
1.2
1.3
1.4
1.5

pax> cat file2.txt
2.1
2.2
2.3
2.4
2.5

pax> head --lines=-1 file1.txt ; tail --lines=+2 file2.txt
1.1
1.2
1.3
1.4
2.2
2.3
2.4
2.5

При подаче команды head отрицательный счет возрастает до того конца.Аналогично, отсчет, начинающийся с +, заставляет tail начинаться с этой строки, а не с определенного количества строк с конца.

...