그래서 다음과 같은 두 개의 파일이 있습니다.
파일 1
userName | cpu% | command | date created
user1 101.6 plasma-de+ Thu Aug 8 09:30:17 MDT 2019
user2 100.0 plasma-de+ Thu Aug 8 09:30:17 MDT 2019
user3 102.0 plasma-de+ Thu Aug 8 09:30:17 MDT 2019
파일 2
userName | cpu% | command | date created | date updated
user1 101.6 plasma-de+ Mon Aug 5 06:35:39 MDT 2019 Mon Aug 5 06:35:39 MDT 2019
user2 100.0 plasma-de+ Mon Aug 5 06:35:39 MDT 2019 Mon Aug 5 06:35:39 MDT 2019
file2 명령 실행 후
userName | cpu% | command | date created | date updated
user1 101.6 plasma-de+ Mon Aug 5 06:35:39 MDT 2019 Thu Aug 8 09:30:17 MDT 2019
user2 100.0 plasma-de+ Mon Aug 5 06:35:39 MDT 2019 Thu Aug 8 09:30:17 MDT 2019
user3 102.0 plasma-de+ Thu Aug 8 09:30:17 MDT 2019 Thu Aug 8 09:30:17 MDT 2019
file1의 col1을 가져오고 싶고 file2의 col1에 일치하는 항목이 있으면 마지막 열의 "업데이트 날짜"를 업데이트하세요. 일치하는 항목이 없으면 file1의 전체 행을 file2에 추가하고 해당 행에 "업데이트된 날짜" 값을 추가하고 싶습니다.
현재 awk 'NR==FNR{c[$1]++;next};c[$1] > 0' file2 file1
기준 비교를 사용하고 있지만 일치하는 항목이 있는 경우 전체 행이 잘못 인쇄되고 날짜 열을 업데이트하기 위해 다른 조건을 추가하는 방법을 알 수 없습니다. 나는 또한 쉘 스크립트에서 이것을 시도했습니다.
답변1
$ cat tst.awk
BEGIN { OFS=" " }
NR==FNR {
if (NR > 2) {
user = $1
file1[user] = $0
sub(/^[[:space:]]*([^[:space:]]+[[:space:]]+){3}/,"")
date[user] = $0
}
next
}
$1 in file1 {
sub(/([[:space:]]+[^[:space:]]+){6}[[:space:]]*$/,"")
$0 = $0 OFS date[$1]
delete file1[$1]
}
{ print }
END {
for (user in file1) {
print file1[user] OFS date[user]
}
$ awk -f tst.awk file1 file2
userName | cpu% | command | date created | date updated
user1 101.6 plasma-de+ Mon Aug 5 06:35:39 MDT 2019 Thu Aug 8 09:30:17 MDT 2019
user2 100.0 plasma-de+ Mon Aug 5 06:35:39 MDT 2019 Thu Aug 8 09:30:17 MDT 2019
user3 102.0 plasma-de+ Thu Aug 8 09:30:17 MDT 2019 Thu Aug 8 09:30:17 MDT 2019