
길이가 같은 두 개의 파일이 있는데 한 파일의 3열을 다른 파일의 내용으로 바꾸고 싶습니다. 다음을 인쇄하고 싶습니다.
f1Col1 f1Col2 f1Col3 f1Col4 f1Col5 f1Col6 f2Col1 f2Col2 f2Col3 f1Col10 f1Col11 f1Col12
등 f1Col1
의 첫 번째 열은 어디에 있습니까?file1
나는 다음을 사용하려고했습니다 :
awk 'NR==FNR {h1[$1] = $1; h2[$2] = $2; h3[$3] = $3; next} {print $1,$2,$3,$4,$5,$6,h1[$1],h2[$2],h3[$3],$10,$11,$12}' file2 file1
에서 필요한 모든 열을 인쇄 file1
하지만 의 열 대신 공백을 인쇄합니다 file2
. 여기서 무슨 문제가 있습니까?
(참고: 저는 OS X Yosemite를 사용하고 있습니다)
답변1
다음을 포함하는 경우 file2
(예:)
The quick brown
fox jumps over
the lazy dog.
그런 다음 스크립트의 첫 번째 부분 awk
은 설정입니다.
h1["The"]="The"
h2["quick"]="quick"
h3["brown"]="brown"
h1["fox"]="fox"
h2["jumps"]="jumps"
h3["over"]="over"
h1["the"]="the"
h2["lazy"]="lazy"
h3["dog."]="dog."
스크립트의 두 번째 부분에서 저장된 값을 사용하려고 하면 아무 소용이 없습니다. 줄 번호로 배열의 색인을 생성해야 합니다.
h1[1]="The"
h2[1]="quick"
h3[1]="brown"
h1[2]="fox"
h2[2]="jumps"
h3[2]="over"
h1[3]="the"
h2[3]="lazy"
h3[3]="dog."
따라서 스크립트는 다음과 같아야 합니다.
awk 'NR==FNR {h1[FNR] = $1; h2[FNR] = $2; h3[FNR] = $3; next}
{print $1,$2,$3,$4,$5,$6,h1[FNR],h2[FNR],h3[FNR],$10,$11,$12}' file2 file1
답변2
는 어때:
paste <(awk'{ print $1,$2,$3,$4,$5,$6 }' file1) <(awk '{ print $1,$2,$3 }' file2) <(awk '{ print $10,$11,$12 }' file1)
- 붙여넣기는 개별 awk 명령에서 입력을 가져옵니다.
- awk 명령을 '<( )' 사이에 배치하면 표준 출력만 읽혀집니다.
- 붙여넣기는 세 개의 출력 파일을 행별로 병합합니다.