Использование:./processing.sh
Этот скрипт не изменяет исходный file_A
, но создает new_file_A
. Вы можете добавить к нему пару строк кода, чтобы удалить исходный file_A
и переименовать new_file_A
в file_A
. Я могу добавить комментарии к коду, если получится, то, что вы хотите.
#!/bin/bash
file_a="file_A.txt"
file_b="file_B.txt"
file_c="file_C.txt"
file_d="file_D.txt"
print_to_files () {
awk -v lines="$1" -v outfile1="$3" -v outfile2="$4" '
BEGIN {
cnt = 2;
split(lines,lines_arr);
}
{
if (NR == 1) {
print $0 > outfile1;
print $0 > outfile2;
} else if (NR == lines_arr[cnt]) {
print $0 >> outfile1;
cnt++;
} else {
print $0 >> outfile2;
}
}
' "$2"
}
lines_matching () {
grep -n -f <(echo "$1") <(echo "$2") | cut -d ':' -f 1
}
file_a_cols=$(awk '{printf "%s %s %s %s\n", $2, $9, $3, $4; }' "$file_a")
file_b_cols=$(tr -s ' ' < "$file_b")
matched_lines_file_a=$(lines_matching "$file_b_cols" "$file_a_cols")
matched_lines_file_b=$(lines_matching "$file_a_cols" "$file_b_cols")
print_to_files "$matched_lines_file_a" "$file_a" "$file_c" "new_$file_a"
print_to_files "$matched_lines_file_b" "$file_b" "/dev/null" "$file_d"
Похоже, это ошибка текущего smbclient (4.10.10 )[1], исправление включено в следующий выпуск.