![bash: 할당된 값을 파일에 추가하는 방법](https://linux55.com/image/76001/bash%3A%20%ED%95%A0%EB%8B%B9%EB%90%9C%20%EA%B0%92%EC%9D%84%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
디렉터리의 여러 파일을 반복하는 bash 스크립트가 있습니다. 파일 식별자는 변수로 저장됩니다 $num
. 내가 원하는 것은 $num
아래 예와 같이 내 데이터에 다른 열을 추가하는 것입니다.
원본 입력:
A B C D E
2 79 56 SD L
1 09 67 JK S
9 60 37 KD G
0 10 47 SO E
예상 출력:
A B C D E id
2 79 56 SD L 1
1 09 67 JK S 1
9 60 37 KD G 1
0 10 47 SO E 1
*위 예에서는 $num
= 1
궁극적으로 저는 루프된 각 파일에서 행의 하위 집합을 가져와 하나의 큰 파일에 넣고 싶습니다. 해당 줄이 어떤 파일에서 왔는지 알려면 해당 줄의 출처 ID가 필요합니다 $num
.
사용해 보았지만 awk '{$12 = $num}' filename
전혀 작동하지 않습니다.
도와주세요!
답변1
시도해 보세요(awk는 한 줄로 이 작업을 수행할 수 있습니다)
id=...
awk -v id=$id 'NR==1 { x=NF+1 ; $x = "id" ; print ; }
NR > 1 { x=NF+1 ; $x = id ; print ; } ' file > new_file
어디
-v id=$id
ID를 쉘에서 awk에 붙여넣으세요. ID에 흥미로운 문자가 있으면 다음을 사용하세요.-v id="îd"
NR == 1
,NR > 1
첫 번째 행을 선택하고 다른 행을 선택하십시오.{ x=NF+1 ; $x = id ; print ; }
$id 푸시(awk의 ID)
답변2
다음 sed
스크립트에서는 필드 구분 기호가 공백이라고 가정합니다. 탭인 경우 s///
두 sed 명령의 공백을 \t
.
첫 번째 행이 id
추가되고 두 번째 및 후속 행이 $num
추가됩니다.
$ num=1
$ sed -e "1 s/$/ id/ ; 2,$ s/$/ $num/" input.txt
A B C D E id
2 79 56 SD L 1
1 09 67 JK S 1
9 60 37 KD G 1
0 10 47 SO E 1