bash: 두 번째 파일에 포함된 사용자 이름으로 일치하는 숫자 교체

bash: 두 번째 파일에 포함된 사용자 이름으로 일치하는 숫자 교체

게시된 결과를 얻기 위해 "파일 1"의 각 줄의 마지막 번호를 "파일 2"의 일치하는 사용자 이름으로 바꾸고 싶습니다.

파일 1:

13/02/28 46.149002259
13/03/22 68.234001404
16/14/03 69.83500766
14/01/29 87.083008540
16/14/03 106.516006874
14/03/16 201.552002260
12/03/12 207.521011278
16/08/18 234.7780151002

파일 2:

사용자 5874
사용자 2404
사용자 81002
사용자 4540
사용자1259
사용자 6260
사용자7278
사용자366

이것은 "파일 2"의 일부일 뿐입니다. 파일에는 실제로 훨씬 더 많은 사용자가 포함되어 있습니다.

결과:

28/02/13 46.149002 사용자1
22/03/13 68.234001 사용자2
14/03/16 69.835007 사용자3
29/01/14 87.083008 사용자4
14/03/16 106.516006 사용자5
14/03/16 201.552 002 사용자6
03/12/12 207.521011 사용자
7 18 /08/16 234.778015 사용자8

답변1

나는 귀하의 파일이 공백으로만 열을 분리하는 엄격한 형식을 가지고 있다고 가정합니다(사용자 이름 안에는 공백이 없습니다). 그러면 이것이 작동할 것입니다(적어도 Linux에서는 내 테스트베드가 Kubuntu입니다).

while read date value number ; do printf "%s %s %s\n" "$date" "$value" "$(grep " $number" file2 | head -n 1 | cut -f 1 -d " ")" ; done <file1

몇 가지 설명:

  1. 명령은 file1( … <file1)에서 읽습니다.
  2. 한 줄( )을 읽을 수 있는 한 while read …
  3. printf …... 세 번째 필드를 ...로 대체하여 인쇄합니다( ).
  4. …효과( $( … )) …
    1. file2... ( grep …, 선행 공백에 주의하세요: " $number") 안에 주어진 숫자가 포함된 줄을 검색합니다 ...
    2. ... 첫 번째 일치 항목만 선택되는 경우( head …만일의 경우에 대비해), ...
    3. … 그러면 첫 번째 열만 남습니다( cut …).

관련 정보