bash: 할당된 값을 파일에 추가하는 방법

bash: 할당된 값을 파일에 추가하는 방법

디렉터리의 여러 파일을 반복하는 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

관련 정보