다섯 번째 열의 값을 바꿉니다.

다섯 번째 열의 값을 바꿉니다.

문자가 여러 개 있어요

Name 1:10:34 date short_id 10 
Name 1:10:45 date short_id 10
Name 1:20:54 date short_id 20
Name 1:30:43 date short_id 30
Name 1:40:43 date short_id 40
Name 1:40:13 date short_id 40
Name 1:20:01 date short_id 20
Name 1:10:01 date short_id 10

다섯번째 열을 교체하고 싶은데 sed 's/\b10\b/user1/g'두 번째 열을 사용하니 역시 바뀌네요

출력은 다음과 같아야 합니다.

Name 1:10:34 date short_id user1
Name 1:10:45 date short_id user1
Name 1:20:54 date short_id user2
Name 1:30:43 date short_id user3
Name 1:40:43 date short_id user4
Name 1:40:13 date short_id user4
Name 1:20:01 date short_id user2
Name 1:10:01 date short_id user1

- - 갱신 - -

user1이 없으면 이름이 있을 것이고, 두 번째 열은 시간일 뿐이고 이름과는 아무런 관련이 없습니다.

이 같은

Name 1:10:34 date short_id John
Name 1:10:45 date short_id John
Name 1:20:54 date short_id Robert
Name 1:30:43 date short_id Jennifer
Name 1:40:43 date short_id Mary
Name 1:40:13 date short_id Mary
Name 1:20:01 date short_id Robert
Name 1:10:01 date short_id John

답변1

글쎄요, 안타깝게도 그건 sed모르겠어요 . 따라서 각 사용자에 대해 또 다른 대체 파일을 작성하고 싶지 않다면 다음과 같은 변환 테이블이 있는 두 번째 파일을 사용하는 것이 좋습니다.10Johnusers.txt

10 John
20 Robert
30 Jennifer
40 Mary

그런 다음 두 파일을 모두 sed이 명령에 입력합니다.

sed '/^[0-9]* [[:alnum:]]*$/{H;d;};G;s/ \([0-9]*\)\n.*\n\1 \([[:alnum:]]*\)/ \2/;P;d' users.txt yourfile.log

번역 테이블을 먼저 읽고 보관 공간에 저장합니다. 다른 파일의 경우 번역이 포함된 예약된 공간이 추가되고 가능한 경우 교체가 수행됩니다. 그런 다음 P첫 번째 개행 문자까지 줄만 인쇄되므로 사용자 ID를 알 수 없는 경우 잘못된 인쇄가 발생하지 않습니다.

좀 더 자세한 설명이 궁금하시다면한 파일에 정의된 콘텐츠를 다른 파일로 바꾸는 방법아니면 편하게 물어보세요.

답변2

두 가지 awk 솔루션도 있습니다.

$ awk '{$5="user"substr($5,1,1)}1' file
Name 1:10:34 date short_id user1
Name 1:10:45 date short_id user1
Name 1:20:54 date short_id user2
Name 1:30:43 date short_id user3
Name 1:40:43 date short_id user4
Name 1:40:13 date short_id user4
Name 1:20:01 date short_id user2
Name 1:10:01 date short_id user1
$
$ awk '{$5="user"$5/10}1' x1
Name 1:10:34 date short_id user1
Name 1:10:45 date short_id user1
Name 1:20:54 date short_id user2
Name 1:30:43 date short_id user3
Name 1:40:43 date short_id user4
Name 1:40:13 date short_id user4
Name 1:20:01 date short_id user2
Name 1:10:01 date short_id user1
$

답변3

awk 'gsub(/0/, "", $5) { print $1, $2, $3, $4, "user" $5 }' INPUT

gsub는 다섯 번째 열에서 숫자 "0"을 삭제합니다. 그런 다음 awk는 열 1-4를 인쇄하고 "user"라는 단어를 열 5와 결합합니다("user"와 $5 사이에는 ","가 없습니다).

답변4

사용sed

sed 's/\(.*\) \(.\).*/\1 user\2/' input_file
Name 1:10:34 date short_id user1
Name 1:10:45 date short_id user1
Name 1:20:54 date short_id user2
Name 1:30:43 date short_id user3
Name 1:40:43 date short_id user4
Name 1:40:13 date short_id user4
Name 1:20:01 date short_id user2
Name 1:10:01 date short_id user1

관련 정보