예를 들어 file.txt가 있습니다(각 행마다 열 수가 다릅니다).
1 2 3 4
5 5 6
7 7 7 7 9 10
2개의 열이 포함된 다른 파일(file2.txt)이 있습니다.
a b
c d
e f
나는 다음 명령을 사용합니다.
awk '{print $1,$(cut -f2 file2.txt)}' file.txt > final.txt
file2.txt의 두 번째 열을 가져와서 file1.txt의 열 1과 열 2 사이에 추가하고 싶습니다.
전임자. 결과:
1 d 2 3 4
5 d 5 6
7 f 7 7 7 9 10
또한 file1.txt의 나머지 모든 열을 유지하고 싶습니다.
답변1
순수한 awk
:
awk '
FNR==NR{c[NR]=$2}
FNR!=NR{$1 = $1 OFS c[FNR]; print}
' file2 file
산출:
1 b 2 3 4
5 d 5 6
7 f 7 7 7 9 10
답변2
조금 잘라서 붙여넣는 건 어때요?
paste -d" " <(cut -d" " -f1 file1.txt) <(cut -d" " -f2 file2.txt) <(cut -d" " -f2- file1.txt)
답변3
awk의 일부 구현에서는 파이프된 하위 프로세스 1 에서 읽기를 허용하지만 , 이 경우 두 번째 파일에서 전체 줄을 읽고 awk 내에서 필드 분할을 수행하는 것이 좋습니다.
$ awk '(getline line < "file2.txt") > 0 {split(line,a); $1 = $1 FS a[2]} 1' file1.txt
1 b 2 3 4
5 d 5 6
7 f 7 7 7 9 10
또는 awk를 완전히 피하고 paste
and 사용하는 것을 고려할 수 있습니다.cut
- 예를 들어 참조하십시오.파이프에서 getline 사용하기
답변4
다음 명령을 사용해보십시오
awk 'FNR==NR{b[FNR]=$2;next}{print $1,b[FNR],$2,$3,$4,$5,$6,$7}' file2.txt file1.txt