두 개의 파일이 있습니다. 하나는 짖고 file1.txt
있고 다른 하나는 person1.txt
. 다음 예와 같이 모두 몇 줄의 텍스트를 포함합니다.
file1.txt
word1 word2 word3 word4 word5 word6 word7 word8 word9
person1.txt
givi sixarulidze
내가 하고 싶은 것은 코드 file1.txt
의 처음 7줄을 person1.txt
.
- 원하는 출력:
givi sixarulidze word8 word9
어떻게 해야 하나요?
답변1
cp person1.txt result.txt
tail -n+8 file1 >> result.txt
답변2
GNU를 사용한 sponge
내부 편집 file1.txt
:
{ cat person1.txt; tail -n +8 file1.txt; } | sponge file1.txt
이렇게 하면 person1.txt
파일의 처음 7줄을 제외한 모든 줄이 파일과 연결 file1.txt
되고 결과가 file1.txt
.
sed
당신은 같은 일을 할 것 입니다
sed -e '1r person1.txt' -e '1,7d' file1.txt | sponge file1.txt
8,$!d
( 대신 사용할 수 있음 1,7d
) 또는 GNU를 사용하는 sed
경우
sed -i -e '1r person1.txt' -e '1,7d' file1.txt
person1.txt
이렇게 하면 내용이 처음에 삽입된 다음 file1.txt
입력 파일의 처음 7줄을 건너뜁니다.
답변3
또 다른 가능성은 다음과 같습니다 awk
.
awk 'NR==FNR || FNR>7' person1.txt file1.txt > result.txt
person1.txt
이 내용이 먼저 처리된 후 처리 됩니다 file1.txt
. 가능한 경우 현재 줄을 인쇄합니다.
- 우리는 두 파일 중 첫 번째 파일을 처리하고 있습니다. 여기서
NR
(글로벌 라인 카운터)는FNR
각 파일의 라인 카운터와 같습니다.또는 - 파일당 라인 카운터가 7보다 큽니다. (이는 두 번째 파일을 처리할 때의 제한일 뿐이며 현재는
NR
더 큽니다FNR
.)
건너뛰려는 각 파일에 대한 줄 사양으로 이를 확장할 수도 있습니다.
awk -- '--skip<=0' person1.txt skip=7 file1.txt skip=4 file2.txt >result.txt
그런 다음 각 파일 이름 앞에 변수 할당을 추가하고 해당 입력 파일에서 건너뛰려는 줄 수로 awk
변수 를 설정하면 됩니다 . skip
프로그램은 awk
처리된 각 행에 대해 이 변수(1씩 감소하는 경우)가 0 미만인지 확인합니다. 이는 건너뛸 행 수에 도달했음을 나타냅니다. 그러면 조건은 가 되고 true
현재 행이 인쇄됩니다.
--
실제 프로그램의 첫 번째 명령은 로 끝나기 때문에 "옵션 끝" 지정자가 필요 합니다 --
.
답변4
$ ed file1
1,7d
0r person1
w
q
또는 스크립트로:
ed -s file1 <<'EOF'
1,7d
0r person1
w
q
EOF
또는
printf '%s\n' 1,7d '0r person1' w q | ed -s file1
오늘날에는 ex
(using vi
)이 (using)보다 더 일반적이지만 ed
둘 다 POSIX에 지정되어 있고 후자가 더 간단합니다. 실제 이식성을 위해 코드 예제를 바꾸십시오 ed
.ex