파일에서 선택한 줄의 시작 부분에 "#"을 추가합니다.

파일에서 선택한 줄의 시작 부분에 "#"을 추가합니다.

요구 사항: 파일 B의 grep인 파일 A의 각 줄 시작 부분에 무언가(예: #)를 추가합니다.

파일 A

abcd
abdc
sdfg
asdfa
jon
ram

문서 B

jon
abcd

파일 A에서 파일 B를 grep하고 파일 A의 시작 부분에 "#" 문자를 추가합니다.

출력은

#abcd
abdc
sdfg
asdfa
#jon
ram

답변1

일방 통행:

awk 'NR==FNR{a[$0];next}$0 in a{printf "#";}1'  fileB fileA

설명하다:

NR==FNR{a[$0];next} => awk는 fileB를 배열로 읽습니다.

$0 in a{printf "#";}=> fileA의 행 중 하나라도 배열 내용과 일치하면 시작 부분에 #을 추가합니다.

1=> fileA의 각 줄을 인쇄합니다.

sed를 사용하세요:

$ x=$(sed -e :a -e 'N;s/\n/\\|/;ta' FileB)
$ sed "s/$x/#&/" FileA

첫 번째 sed 명령은 모든 줄이 문자열로 함께 연결되고 "|"로 구분된 문자열을 준비합니다. $x에 저장됩니다. 두 번째 sed는 $x 변수에 저장된 패턴과 일치하는 행의 시작 부분에 #을 삽입합니다.

답변2

다음 oneliner를 사용하여 이 작업을 수행할 수 있습니다.

sed "$(for str in $(cat fileB); do echo -n "s/$str/#\0/; "; done;)" fileA

명령 sed은 fileB를 반복하여 하위 쉘에 구성됩니다. 그런 다음 #일치하는 줄을 a 및 일치하는 줄로 바꿉니다.

관련 정보