파일이 끝날 때까지 한 파일을 두 번째 파일에 추가합니다.

파일이 끝날 때까지 한 파일을 두 번째 파일에 추가합니다.

두 개의 파일이 있습니다. 첫 번째는 단지 숫자일 뿐입니다. 이 숫자는 매번 계산되어 변경됩니다. 두 번째 파일에는 여러 개의 열이 있으며 행 수를 모릅니다(변경 가능). 예를 들어 다음과 같은 것이 있습니다.

파일 1:

12

파일 2:

1 2 3 
4 5 6
7 8 9

제 생각에는

1 2 3 12
4 5 6 12
7 8 9 12

내 생각은 당신이 할 수 있다는 while not EOFcat File 1입니다 File 2. 어떻게 해야 하나요?

답변1

다른 awk:

$ awk 'BEGIN{getline l <"file1"};{print $0, l}' file2
1 2 3 12
4 5 6 12
7 8 9 12
  • BEGIN블록은 입력 파일을 읽기 전에 먼저 실행됩니다. 첫 번째 줄은 함수를 file1사용하여 검색되고 getline()변수에 저장됩니다.l
  • 의 각 줄에 대해 기본적으로 공백인 로 ​​구분하여 해당 내용을 함께 인쇄합니다 file2.$0lOFS

답변2

awk를 사용하세요

$ awk -v n=$(cat file1) '{print $0,n}' file2
1 2 3 12
4 5 6 12
7 8 9 12

csh/ 에서 tcsh다음을 시도해 보세요.

awk -v n=`cat file1` '{print $0,n}' file2

어떻게 작동하나요?

  • -v n=$(cat file1)

    그러면 내용이 file1awk 변수에 할당됩니다 n.

  • print $0,n

    그러면 다음에 나오는 각 줄이 인쇄됩니다 n.

sed 사용

$ sed '1{h;d}; G;s/\n/ /' file1 file2
1 2 3 12
4 5 6 12
7 8 9 12

어떻게 작동하나요?

  • 1{h;d}

    읽은 첫 번째 줄은 예약된 공간에 저장된 다음 해당 패턴 공간에서 제거됩니다(따라서 인쇄되지 않음).

  • G; s/\n/ /

    모든 후속 라인에 대해 get 명령을 사용합니다 G. 패턴 공간에 개행 문자와 예약된 공간이 추가됩니다. 그런 다음 개행 문자를 공백으로 바꿉니다.

답변3

이것은 작동합니다(이 경우 file2가 업데이트됩니다. 원하지 않으면 -i 플래그를 제거하십시오).

   sed -i "s/.*/& $(cat file1)/" file2

답변4

연인을 위한 sed- 읽기파일 1각 행마다파일 2이는 좋은 생각이 아닙니다. 변수를 사용하는 것이 더 좋습니다.

my_var=$(<file1) ; sed "s/$/ $my_var/" file2

또는 더 안전한

read -r my_var <file1 ; sed "s/$/ $my_var/" file2

관련 정보