비슷한 Q&A를 많이 살펴봤지만 여전히 해결책이 없습니다.
2개의 파일이 있습니다.
파일 1
cow
aaaaa
brown
bbbbb
often
ccccc
farts
ddddd
파일 2
File2에서는 "space"를 구분 기호로 사용한 다음 col 1="brown" 및 col2="149,456,foo"를 사용합니다. 또한 File1과 File2의 순서가 다릅니다(여기에서는 정렬이 작동하지 않습니다. 교체를 위해 일치하는 키에 의존하고 싶습니다).
brown 149,456,foo
cow 192,231,bar
farts 81,2007,tip
often 427,541,top
파일 3을 만들고 싶습니다.
cow 192,231,bar
aaaaa
brown 149,456,foo
bbbbb
often 427,541,top
ccccc
farts 81,2007,tip
ddddd
즉, File2의 column1(갈색)을 기록하고 File1에서 검색합니다. File1에서 일치 항목이 발견되면 일치 항목을 해당 File2의 전체 줄(갈색 149,456,foo)로 바꿉니다.
나는 이것을 시도했습니다 :
$ awk 'NR==FNR{a[NR]=$0;next}{$6=a[FNR]}1' file2 file1
그러나 결과는 각 row1을 가져온 다음 다른 파일의 row1과 함께 인쇄하는 것으로 보이며 일치/교체가 필요하지 않습니다.
brown brown 149,456,foo
aaaa cow 192,231,bar
cow farts 81,2007,tip
bbbbb often 427,541,top
farts
ccccc
often
ddddd
awk나 sed를 사용하고 싶습니다. 어떤 조언이라도 미리 감사드립니다!
답변1
노력하다:
$ awk 'FNR==NR{a[$1]=OFS $2;next} {print $0 a[$1]}' file2 file1
cow 192,231,bar
aaaaa
brown 149,456,foo
bbbbb
often 427,541,top
ccccc
farts 81,2007,tip
ddddd
어떻게 작동하나요?
FNR==NR{a[$1]=OFS $2;next}
file2
명령줄의 첫 번째 파일을 읽을 때a
첫 번째 필드의 키 아래 연관 배열에 항목을 추가합니다$1
. 항목은 출력 필드 구분 기호OFS
와 두 번째 필드로 구성됩니다$2
. 그런 다음 나머지 명령을 건너뛰고 다시 시작합니다next
.인쇄
$0 a[$1]
file1
명령줄의 두 번째 파일을 읽는 동안 각 줄을 인쇄한 다음a
해당 줄의 배열 값을 인쇄합니다.