Saya memiliki file dibatasi dengan ratusan ribu baris yang harus dimigrasikan ke sistem baru. Salah satu bidang diperlukan di sistem baru dan harus unik, tetapi sering hilang di ...

1
Kyle Banerjee 5 April 2021, 23:17

1 menjawab

Jawaban Terbaik

Dengan asumsi file input Anda seperti ini:

cat -vte file

field1^Irequiredfield^Ifield3$
value1^InetworkId^Ivalue3$
value2^I ^Ivalue4$
value5^I ^Ivalue6$
value7^I ^Ivalue8$

Anda dapat mencoba ini awk yang menjalankan perintah yang diberikan untuk setiap catatan dan menggunakan output dari shell jika perintah batin gagal:

cmd="uuidgen"

awk -v cmd="$cmd" -v uuid="$($cmd)" '
BEGIN {FS=OFS="\t"}
$2 ~ /^[[:blank:]]*$/ {
   $2 = ((cmd | getline out) > 0 ? out : uuid)
   close(cmd)
} 1' file | column -t

field1  requiredfield                         field3
value1  networkId                             value3
value2  857063FB-673B-487B-8C00-6DF01537DA22  value4
value5  63333D5E-2156-4855-B8BC-CBB7CEF9E9F4  value6
value7  8CD16A13-F0F5-42E6-9998-3AA064F9B4FC  value8

column -t telah digunakan untuk output tabular.

0
anubhava 5 April 2021, 20:39