2016-12-16 1 views
0

좋은 것을 찾았지만 찾기에 가장 가까운 것은 마지막 줄에 추가하는 것입니다. 내가 찾은마지막 줄 앞에 n 번째 줄을 추가합니다.

한 예는 마지막 줄

sed '$ e cat word.txt' test.txt

I 라인 마지막으로 두 번째에 도착 sed으로 x 명령을 사용하고있어 가장 가까운에 추가되었다.

sed 'x;$ e cat word.txt' test.txt

그러나, 나는 3, 4 라인 등 마지막 줄의에서 추가하는 방법을 알고 싶습니다. 예를 들어

word.txt

lorem ipsum... 

TEST.TXT

1 
2 
3 
4 
5 
6 
7 

test.txt

,536의 마지막 행에 4를 추가 word.txt
1 
2 
3 
4 
lorem ipsum... 
5 
6 
7 

유일한 예제는 줄의 시작 부분부터 n 번째 부분을 추가하는 것이지만 마지막 마지막 줄부터 n 번째 부분을 추가하는 것이 아닙니다.

+2

테스트 데이터와 예상 출력을 게시하시기 바랍니다. –

+0

@JamesBrown done – Tek

답변

2

사용 headtail : AWK와

{ 
    head -n-3 text.txt 
    cat word.txt 
    tail -n3 text.txt 
} > newfile.txt 
0

당신이 이전에 그것을 처리에 파일을 전환 할 필요가 없습니다 :

awk -v last=3 -v toadd="$(<word.txt)" ' 
    NR > last { print a[(NR-1) % last] } 
    { a[(NR-1) % last] = $0 } 
    END{ 
     print toadd 
     for(i=NR-last; i<NR; i++) 
      print a[i % last] 
    }' file 
1

을 GNU AWK (ARGIND 변수)에서 :

$ awk -v nth=4 ' 
    ARGIND==1 { s=s (s==""?"":ORS) $0; next } 
    ARGIND==2 { nr=NR; next } 
    ARGIND==3 && FNR==(nr-nth) { print s } 
    1' word test test 
1 
2 
3 
lorem ipsum... 
4 
5 
6 
7 

test을 두 번 읽습니다. calc 첫 번째 시도에서 레코드 수를 계산합니다.

0

awk 사용하면 모든 라인을 저장 한 다음

{ lines[NR] = $0 } 
END{ for (i = 1; i <= NR; i++) { 
    if (NR-n + 1 == i) 
     print word; 
    print lines[i] 
    } 
} 

END 블록에 인쇄 할 수 있습니다 예

$ awk -vn=3 -vword="$(cat word)" -f prog.awk file 
1 
2 
3 
4 
lorem ipsum.. 
5 
6 
7 
+0

출력 레코드 순서는 임의적입니다. 'for '를'for (i = 1; i <= nr; i ++)'로 변경하면 작동 할 것입니다. 그리고'NR'이'END' 블록에 정의되어 있는지 모르겠습니다. –

+1

@JamesBrown 왜 무작위인지 확실하지 않습니다. 어쨌든 나는 우리가 놀라움을 갖지 않도록 그것을 바로 잡았습니다. 'NR'은'END' 블록에서 사용할 수 있습니다. – nu11p01n73R

관련 문제