txt 파일의 콘텐츠 열을 사용자 정의 문자열로 바꿉니다.

txt 파일의 콘텐츠 열을 사용자 정의 문자열로 바꿉니다.

아래 txt 파일의 세 번째 열 내용을 사용자 정의 텍스트로 바꾸려고 합니다. 즉, GCM아래 세 번째 열의 내용 대신입니다. Example1, Example2, ... , 와 같은 사용자 정의 텍스트를 원합니다 ExampleN. 이러한 대체 문자열은 다른 텍스트 파일에서 제공됩니다.

odu-encryption-2/1/5/odu4-1             enabled            GCM                ^M^M
odu-encryption-2/1/6/odu4-1             enabled            GCM                ^M^M
odu-encryption-2/1/7/odu4-1             enabled            GCM                ^M^M
odu-encryption-2/3/1/odu4-1/odu2e-1     enabled            GCM                ^M^M

파일은 공백으로 구분됩니다. 마지막 열은 ^M^M라우터의 표준 출력입니다.

예상 출력 -

odu-encryption-2/1/5/odu4-1             enabled            John1                ^M^M
odu-encryption-2/1/6/odu4-1             enabled            Mike2                ^M^M
odu-encryption-2/1/7/odu4-1             enabled            Tom33                ^M^M
odu-encryption-2/3/1/odu4-1/odu2e-1     enabled            WolfN               ^M^M

Bash에서 이 작업을 수행하는 방법을 아는 사람이 있나요? sed '3s/$/ Ccustom text/' testing.txt세 번째 줄을 사용자 정의 텍스트로 바꿀 수 있는지 알아보기 위해 을 사용해 보았지만 그 안의 기존 텍스트가 바뀌었습니다.

답변1

다른 파일에 다음과 같이 한 줄에 하나의 문자열이 있는 경우:

$ cat file2
John1
Mike2
Tom33
WolfN

찾은 순서대로 추가하려면 다음과 같이 하세요.

$ awk 'NR == FNR{a[NR]=$1;next}; {$(NF-1)=a[FNR]; }1' file2 file1
odu-encryption-2/1/5/odu4-1 enabled John1 ^M^M
odu-encryption-2/1/6/odu4-1 enabled Mike2 ^M^M
odu-encryption-2/1/7/odu4-1 enabled Tom33 ^M^M
odu-encryption-2/3/1/odu4-1/odu2e-1 enabled WolfN ^M^M

그러나 이것은 연속된 공백을 축소합니다. 이것이 문제라면 다음과 같이 할 수 있습니다.

$ cat file1 | perl -lape 'BEGIN{open($fh,"file2"); while(<$fh>){chomp; $a[$.]=$_}} s/$F[2]/$a[$.]/ ' 
odu-encryption-2/1/5/odu4-1             enabled            John1                ^M^M
odu-encryption-2/1/6/odu4-1             enabled            Mike2                ^M^M
odu-encryption-2/1/7/odu4-1             enabled            Tom33                ^M^M
odu-encryption-2/3/1/odu4-1/odu2e-1     enabled            WolfN                ^M^M

관련 정보