요구 사항: 파일 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 및 일치하는 줄로 바꿉니다.