파일에 사용자 정의된 줄 번호를 추가하는 방법

파일에 사용자 정의된 줄 번호를 추가하는 방법

file2에 추가하고 싶습니다 file1. 그렇게 하기 전에 file2.

file1

1 abc
2 bcd
3 efg

file2

mkh
dfd
aad
  1. file2다음 에 줄 번호를 추가합니다 file1.

    4 mkh
    5 dfd    
    6 aad
    
  2. file2다음에 추가file1

    cat file2 >> file1
    

위에 표시된 줄 번호를 어떻게 추가할 수 있나요 file2?

답변1

nl -v "$((1+$(wc -l < file1)))" file2 >> file1

nl하기 위한 도구이다N엄버파일의 ines입니다. 스위치 -v는 줄 번호의 시작 값을 제공합니다. 나는 서브쉘을 사용하여 의 wc줄 수를 얻고 file1여기에 1을 추가하여 의 시작 줄 번호를 얻고 file2결과를 의 끝에 연결합니다 file1.

줄 수 wc -l file1와 파일 이름을 인쇄하지만 wc의 stdin을 from 으로 리디렉션했기 때문에 file1도구 wc자체는 파일 이름에 대해 아무것도 모르고 줄 수만 file1인쇄합니다(일부 공백 포함). 이 맥락에서는 중요하지 않습니다).


이것은 할 수 있습니다약간awkand를 사용하면 더 깔끔하게 nl:

nl -v $(awk 'END { print NR + 1 }' file1) file2 >> file1

답변2

와 함께 awk:

awk -v nl=$(wc -l <f1.txt) '{print NR+nl " " $0}' f2.txt
  • $(wc -l <f1.txt)파일의 줄 수를 가져오면 이를 변수 f1.txt로 전달합니다 .nlawk

  • print NR+nl " " $0f2.txt변수에 해당 줄 번호를 추가한 nl다음 공백, 전체 레코드를 추가하여 각 레코드를 인쇄합니다.

예:

% cat f1.txt 
1 abc
2 bcd
3 efg

% cat f2.txt 
mkh
dfd
aad

% awk -v nl=$(wc -l <f1.txt) '{print NR+nl " " $0}' f2.txt
4 mkh
5 dfd
6 aad

답변3

또 다른 awk해결책:

$ awk 'NF==1{print ++c" "$1 >> "file1"} NF>1{c=$1}' file1 file2
$ cat file1
1 abc
2 bcd
3 efg
4 mkh
5 dfd
6 aad


일반 사례:

$ cat file1
1 abc x
2 bcd y
3 efg z
$ cat file2
mkh 1a
dfd foo
aad bar

$ awk 'NR==FNR{c=$1; next} {print ++c" "$0 >> "file1"}' file1 file2
$ cat file1
1 abc x
2 bcd y
3 efg z
4 mkh 1a
5 dfd foo
6 aad bar

답변4

매우 간단한 대답은 다음과 같습니다.

$ 고양이 테스트텍스트
1. 날렵한 갈색 여우가 게으른 개를 뛰어넘었습니다.

$ 고양이 테스트텍스트 | tr ' ' '\n' | 정렬 >testText2

$ 고양이 -n testText testText2
     1 1. 날렵한 갈색 여우가 게으른 개를 뛰어넘었습니다.
     2 1.
     3 브라운
     4개.
     여우 5마리
     6 뛰어 올랐다
     7 게으른
     8 오버
     9 빨리
    10
    11

관련 정보