Я ссылаюсь на эту ссылку https://stackoverflow.com/a/54767231/11084572. У меня есть config file
, где 2nd column is feature
и 3rd column is action
.У меня есть еще один большой файл, в котором мне нужно сопоставить 1-й столбец этого файла с 1-м столбцом config file
и выполнить действие в соответствии с функцией.
Допущение: в столбце File.txt имена имеют вид Min (3rd col),Median (4th), Max(5th)
Config.txt
Apple All Max
Car abc Median
Car xyz Min
Book cvb Median
Book pqr Max
File.txt
Apple first 10 20 30
Apple second 20 30 40
Car abc 10 20 30
Car xyz 20 30 40
Car wxyz 10 20 30
Book cvb 60 70 80
Book pqr 80 90 100
Ожидаемый вывод:
Apple first 30
Apple second 40
Car abc 20
Car xyz 20
Car wxyz 10
Book cvb 70
Book pqr 100
Вышеуказанный вывод генерируется наПодход followinfg:
1) Поскольку file.txt
большой, поэтому, если свойство (2-я колонка) config file
равно ALL, то все соответствующие 1-й столбец будут выполнять действие в соответствии с 3-й колонкойconfig file
.
2) В противном случае он работает, если 2-й столбец config file
соответствует **substring**
второму столбцу file.txt
Вот что я пробовал:
awk 'BEGIN {m["Min"]=3;m["Median"]=4;m["Max"]=5}
NR==FNR{ arr[$1]=$2;brr[$1]=$3;next}
($1 in arr && arr[$1]=="All") {print $1,$2,$m[brr[$1]]}
($1 in arr && $2==arr[$1] ) {print $1 ,$2,$m[brr[$1]]}
' Config.txt File.txt
Вывод кода:
Apple first 30
Apple second 40
Book pqr 100
Car xyz 20
Вышеуказанный вывод печатает только одно поле соответствующего 1-го столбца (например, Book cvb 70
не печатает).Также, как я мог сопоставить строку как конечную строку (например, xyz
, определенный в config.txt, соответствует обоим xyz and wxyz
файла file.txt.
Пожалуйста, помогите мне решить вышеупомянутую проблему. Спасибо!