one.txt라는 두 개의 파일이 있습니다.
"297","237","14",NULL,"51.195.14.201","02:00:00:1a:1c:06","255.0.0.0","10.0.10.1","32",NULL,NULL,"net0"
"303","242","14",NULL,"51.195.14.207","02:00:00:a3:03:10","255.0.0.0","10.0.10.1","32",NULL,NULL,"net0"
"323","249","14",NULL,"51.195.14.209","02:00:00:dd:1f:11","255.0.0.0","10.0.10.1","32",NULL,NULL,"net0"
그리고 다음을 포함하는 다른 두 개의 .txt
51.195.14.201, 193.138.35.127, 02:00:00:20:a2:27
51.195.14.209, 193.138.35.128, 02:00:00:20:a2:28
Two.txt의 첫 번째 필드에 one.txt의 필드 5와 동일한 입력이 포함된 줄이 포함된 경우(정확해야 하며, 예를 들어 51.195.14.1
와도 충돌함 51.195.14.11
) 5번째 필드는 Two의 두 번째 필드로 대체되어야 합니다. .txt , 6번째 필드는 Two.txt의 3번째 필드로 대체되어야 합니다. 수정된 모든 행에는 세 번째 필드가 로 바뀌고 19
, 일곱 번째 필드가 로 바뀌고 255.255.255.0
, 여덟 번째 필드가 로 바뀌고 193.138.35.1
, 아홉 번째 필드가 로 바뀌어야 합니다.24
변화는 다음과 같아야합니다
"297","237","19",NULL,"193.138.35.127","02:00:00:20:a2:27","255.255.255.0","193.138.35.1","24",NULL,NULL,"net0"
"303","242","14",NULL,"51.195.14.207","02:00:00:a3:03:10","255.0.0.0","10.0.10.1","32",NULL,NULL,"net0"
"323","249","19",NULL,"193.138.35.128","02:00:00:20:a2:28","255.255.255.0","193.138.35.1","24",NULL,NULL,"net0"
일부 열에는 NULL
따옴표가 포함되어 있지 않습니다.
답변1
awk를 사용하십시오.
$ awk -F', *' -v OFS=',' -v q='"' '
NR==FNR {a[q $1 q]=$2; b[q $1 q]=$3; next }
$5 in a {
$6=q b[$5] q; $5=q a[$5] q; $3=q 19 q; $7=q "255.255.255.0" q;
$8=q "193.138.35.1" q; $9=q 24 q
}
{ print }
' two.txt one.txt
"297","237","19",NULL,"193.138.35.127","02:00:00:20:a2:27","255.255.255.0","193.138.35.1","24",NULL,NULL,"net0"
"303","242","14",NULL,"51.195.14.207","02:00:00:a3:03:10","255.0.0.0","10.0.10.1","32",NULL,NULL,"net0"
"323","249","19",NULL,"193.138.35.128","02:00:00:20:a2:28","255.255.255.0","193.138.35.1","24",NULL,NULL,"net0"