だから、次の2つのファイルがあります。
ファイル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