텍스트의 첫 번째 줄을 다른 텍스트 파일로 복사

텍스트의 첫 번째 줄을 다른 텍스트 파일로 복사

앞으로:

파일 1

123
456

파일 2

foo
testing

뒤쪽에:

파일 1

123
456

파일 2

foo
testing 123

어떤 도움이라도 대단히 감사하겠습니다.

답변1

이 시도,

sed -i "$ s/$/ $(head -1 file1)/" file2
testing 123
  • $파일의 마지막 줄을 편집합니다.
  • s/$$(head -1 file1)EOL을 file1의 첫 번째 줄로 바꿉니다 .

답변2

귀하가 예시에서 제시한 내용을 바탕으로 제가 귀하에게 제안하고 싶은 것은 다음과 같습니다.

echo -en " `head -1 file1`" >> file2

답변3

이 작업은 언뜻 보이는 것만큼 명확하지 않습니다.

Slyx의 코드를 사용하고 원치 않는 개행 문자를 제거 sed $!N;$s/\n//;P;D하거나 두 파일 모두에 속하지 않는 것으로 알려진 문자열을 찾으십시오 =snip=.

sed '1h;1,/=snip=/d;$G;s/\n/ /' file1 <( echo =snip=) file2

출력은 다른 파일로 파이프된 다음 복사될 수 있습니다 ( 스타일에 옵션이 file2있더라도 두 파일의 일부를 사용할 때는 작동하지 않습니다).sed-i

코드는 무엇을 합니까?

  • 1hsed나중에 추가할 수 있도록 라인 1을 예약된 공간("클립보드")에 저장합니다.
  • 1,/=snip=/dfile21번째 줄부터 표시된 줄까지 모두 삭제하면 인쇄 만 됩니다.
  • $G예약된 공간에 저장된 행을 마지막 행( $) 에 추가합니다.
  • s/\n/ /포함된 줄바꿈을 공백으로 바꿉니다. 이는 예약된 공간을 추가한 후 마지막 행에서만 발생합니다.
  • file1 <( echo =snip=) file2파일 스트림은 다음과 같습니다 sed. 먼저 첫 번째 줄을 추출한 다음 파일 1이 언제 끝나는지 알 수 있는 file1더미 파일을 포함하고 마지막으로=snip=file2

사실, sed요령을 배우는 것은 훌륭한 과제입니다.

답변4

가지다 ed:

ed file2 <<END
1a
$(head -n 1 file1)
.
1s/$/ /
1,2j
wq
END

하지만 awk가 더 명확할 수도 있습니다.

awk -v "f1=$(head -n1 file1):" 'NR == 1 {$0 = $0 FS f1} 1' file2

file2는 제자리에 저장되지 않습니다. 이를 위해 GNU awk를 사용하여 이를 수행할 수 있습니다.

gawk -i inplace -v "f1=$(head -n1 file1):" 'NR == 1 {$0 = $0 FS f1} 1' file2

또는 awk를 사용하십시오.

awk -v ... file2 > tmpfile2 && mv tmpfile2 file2

또 다른 어리석은 옵션

gawk '
    FNR == 1 { if (NR == FNR) {f1 = $0; nextfile} else {$0 = $0 FS f1} }
    {print}
' file1 file2

관련 정보