앞으로:
파일 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
코드는 무엇을 합니까?
1h
sed
나중에 추가할 수 있도록 라인 1을 예약된 공간("클립보드")에 저장합니다.1,/=snip=/d
file2
1번째 줄부터 표시된 줄까지 모두 삭제하면 인쇄 만 됩니다.$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