두 개의 파일이 있습니다. 첫 번째는 단지 숫자일 뿐입니다. 이 숫자는 매번 계산되어 변경됩니다. 두 번째 파일에는 여러 개의 열이 있으며 행 수를 모릅니다(변경 가능). 예를 들어 다음과 같은 것이 있습니다.
파일 1:
12
파일 2:
1 2 3
4 5 6
7 8 9
제 생각에는
1 2 3 12
4 5 6 12
7 8 9 12
내 생각은 당신이 할 수 있다는 while not EOF
것 cat File 1
입니다 File 2
. 어떻게 해야 하나요?
답변1
다른 awk
:
$ awk 'BEGIN{getline l <"file1"};{print $0, l}' file2
1 2 3 12
4 5 6 12
7 8 9 12
BEGIN
블록은 입력 파일을 읽기 전에 먼저 실행됩니다. 첫 번째 줄은 함수를file1
사용하여 검색되고getline()
변수에 저장됩니다.l
- 의 각 줄에 대해 기본적으로 공백인 로 구분하여 해당 내용을 함께 인쇄합니다
file2
.$0
l
OFS
답변2
awk를 사용하세요
$ awk -v n=$(cat file1) '{print $0,n}' file2
1 2 3 12
4 5 6 12
7 8 9 12
csh
/ 에서 tcsh
다음을 시도해 보세요.
awk -v n=`cat file1` '{print $0,n}' file2
어떻게 작동하나요?
-v n=$(cat file1)
그러면 내용이
file1
awk 변수에 할당됩니다n
.print $0,n
그러면 다음에 나오는 각 줄이 인쇄됩니다
n
.
sed 사용
$ sed '1{h;d}; G;s/\n/ /' file1 file2
1 2 3 12
4 5 6 12
7 8 9 12
어떻게 작동하나요?
1{h;d}
읽은 첫 번째 줄은 예약된 공간에 저장된 다음 해당 패턴 공간에서 제거됩니다(따라서 인쇄되지 않음).
G; s/\n/ /
모든 후속 라인에 대해 get 명령을 사용합니다
G
. 패턴 공간에 개행 문자와 예약된 공간이 추가됩니다. 그런 다음 개행 문자를 공백으로 바꿉니다.
답변3
이것은 작동합니다(이 경우 file2가 업데이트됩니다. 원하지 않으면 -i 플래그를 제거하십시오).
sed -i "s/.*/& $(cat file1)/" file2
답변4
연인을 위한 sed
- 읽기파일 1각 행마다파일 2이는 좋은 생각이 아닙니다. 변수를 사용하는 것이 더 좋습니다.
my_var=$(<file1) ; sed "s/$/ $my_var/" file2
또는 더 안전한
read -r my_var <file1 ; sed "s/$/ $my_var/" file2