첫 번째 줄과 마지막 줄을 건너뛰고 파일을 에코하는 쉬운 방법이 있습니까? head
에서 파이핑을 보고 있는데 tail
, 그런 경우에는 처음부터 전체 행 수를 알아야 할 것 같습니다. 나도 그 방법을 살펴봤지만 split
그렇게 할 수 있는 방법을 찾지 못했습니다.
답변1
sed
파이프 없이 다음을 수행하십시오 .
sed '1d;$d' file.txt
노트
1
의미는첫번째 줄d
의미는삭제;
두 명령 사이의 구분 기호입니다.$
의미는마지막 줄
더 읽기 쉬운:
sed -e '1d' -e '$d' file.txt
답변2
행 수를 미리 알 필요는 없습니다. tail
그리고 head
파일의 시작이나 끝에서 각각 오프셋을 얻을 수 있습니다.
파이프라인은 파일의 두 번째 줄에서 시작하고(첫 번째 줄 건너뛰기) 마지막 줄에서 중지합니다(마지막 줄 건너뛰기). 시작이나 끝에서 여러 줄을 건너뛰려면 그에 따라 숫자를 조정하세요.
tail -n +2 file.txt | head -n -1
물론, 반대로 해도 효과는 동일합니다.
head -n -1 file.txt | tail -n +2
답변3
수행 방법은 다음과 같습니다 awk
.
awk 'NR>2 {print t} {t=$0}'
또 다른 방법이 있습니다 sed
:
sed '1d;x' file.txt
x
현재 라인을 이전 라인으로 전환하는 고급 sed
명령입니다. 현재 라인은 버퍼로 들어가고, 이전 라인은 화면으로 들어가는 식으로 sed
스트림을 한 라인씩 처리하는 동안 계속됩니다(그래서 첫 번째 라인이 공백).
awk
각 단계(라인)에 대한 해결책은 현재 라인을 변수에 넣고 두 번째 라인이 지나간 후에만 인쇄를 시작하는 것입니다. 그래서 우리는 두 번째 줄부터 마지막 줄까지 화면에 지저분한 줄 순서를 보게 됩니다. 마지막 줄은 변수에 있고 다음 단계에서만 인쇄되어야 하기 때문에 생략되었습니다. 그러나 모든 단계가 사용되어 화면에 해당 줄이 표시되지 않습니다.
같은 생각 perl
:
perl -ne 'print $t if $.>2 ; $t=$_' file.txt
$.
줄 번호와 $_
현재 줄을 나타냅니다.
perl -n
는 while(<..>) {..}
구조에 대한 단축키이고 -e
인라인 스크립트에 대한 단축키입니다.
답변4
파이썬에서는 이렇게 할 것입니다.
#!/usr/bin/python3
import re
import sys
file = sys.argv[1]
with open(file, 'r') as f:
L = []
for line in f:
line = re.sub(r'\n', r'', line)
L.append(line)
print('\n'.join(L[1:-1]))
위 코드를 파일에 붙여넣고 이름을 script.py
확인하려는 파일에 대해 스크립트를 실행합니다.
python3 script.py /path/to/the/file
예:
$ cat file
foo
apple
banana
bar
$ python3 script.py file
apple
banana