Unix에서 마지막 단어 뒤에 파일 텍스트 추가

Unix에서 마지막 단어 뒤에 파일 텍스트 추가

UNIX 시스템에서 다른 파일의 마지막 단어 뒤에 파일 텍스트를 추가하고 싶습니다.

파일 1

& program executed successfully

파일 2

Hello
World
This is a sample output 

처음 두 단어를 복사하여 file2의 마지막 단어 뒤에 붙여넣고 싶습니다.

예상 출력:

파일 3

Hello
World
This is a sample output & program

File2에는 끝에 개행 문자가 있으므로 이를 사용하려고 하면 cat같은 줄의 마지막 단어 뒤가 아닌 새 줄에 인쇄됩니다. UNIX 명령과 bash 쉘을 사용하는 솔루션을 제안하십시오.

답변1

각 줄의 처음 2개 단어를 선택할 수 있습니다 file2.

$ cut -d' ' -f1-2 file1 
& program

따라서 이를 사용하여 다음과 같은 작업을 수행할 수 있습니다.

$ printf '%s %s\n' "$(cat file2)" "$(cut -d' ' -f1-2 file1)" > file3
$ cat file3
Hello
World
This is a sample output & program

파일에 두 개 이상의 줄이 있을 수 있고 첫 번째 줄만 필요한 경우 다음을 전달하세요 head.

printf '%s %s\n' "$(cat file2)" "$(cut -d' ' -f1-2 file1 | head -n1)"

답변2

제 생각에는테든의 답변두 번째 파일이 짧다는 것을 알고 있다면 괜찮습니다. 파일이 짧다는 것을 모르거나 파일이 충분히 길다는 것을 알고 명령 대체로 읽지 않으려면 다음과 같이 대체에서 파일의 마지막 줄을 넘어 확장되지 않도록 선택할 수 있습니다.

{
    sed '$d' file2
    printf '%s %s\n' "$( tail -n 1 file2 )" "$( cut -d ' ' -f -2 file1 )"
} >file3

먼저 sed출력의 마지막 줄을 제외한 모든 항목 에 대해 file2terdon 코드의 수정된 변형을 사용하여 마지막 줄 file2과 공백으로 구분된 처음 두 단어를 출력합니다 file1.

답변3

작은 프로그램을 사용할 수 있습니다 ed.

ed -s file2 << \EOF
$r !cut -d " " -f1,2 file1
-1,.j
w file3
EOF

또는 문장으로:

printf '%s\n' '$r !cut -d " " -f1,2 file1' '-1,.j' 'w file3' | ed -s file2

답변4

그리고 awk:

awk 'NR==FNR { append=$1 OFS $2; next }
prev!=""{ print prev } { prev=$0 }
END{ print prev, append }' file1 file2

현재 줄을 임시 변수에 저장하면 prev출력 줄이 하나씩 지연되므로 모든 줄을 처리하는 동안 파일 1의 텍스트를 파일 2의 마지막 줄에 추가합니다.

관련 정보