#linux #bash #awk #scripting #suse
#linux #bash #awk #сценарии #suse
Вопрос:
У меня есть два текстовых файла, и я хочу сравнить их соответствующие значения в соответствии с их строками и столбцами. Каждое значение (поле) в текстовом файле разделено табуляцией.
Вот файлы:
file1.txt
Name Col1 Col2 Col3
-----------------------
row1 1 4 7
row2 2 5 8
row3 3 6 9
file2.txt
Name Col1 Col2 Col3
-----------------------
row2 1 4 11
row1 2 5 12
row3 3 9
Вот код, который у меня есть на данный момент:
awk '
FNR < 2 {next}
FNR == NR {
for (i = 2; i <= NF; i ) {
a[i,$1] = $i;
}
next;
}
# only compare if a row in file2 exists in file1
($1 in b) {
for (i = 2; i <= NF; i )
{
if (a[i,$1] == $i)
{
print "EQUAL"
}
else if ( //condition that checks if value is null// )
{
print "NULL"
}
else
{
print "NOT EQUAL"
}
}
}' file1.txt file2.txt
У меня возникают трудности с проверкой наличия нулевого значения ( row3
и col2
in file2.txt
) file2.txt
. Я даже не получаю вывод для этого нулевого значения. До сих пор я пробовал if ($i == "")
, и это все еще не дает мне никаких результатов. Есть предложения? Спасибо. (Я использую gnu awk в скрипте bash)
Дайте мне знать, если требуется дополнительное объяснение.
Комментарии:
1. @EdMorton Я уже упоминал, что значения (или поля) в каждом текстовом файле разделены табуляциями в вопросе! Это в первом абзаце вопроса.
2. Итак, вы это сделали, я этого не заметил, я просто увидел, что ваш скрипт не использует табуляции в качестве разделителей.
3. @EdMorton не
awk
проверяет табуляцию автоматически?4. Если вы имеете в виду, использует ли awk табуляции в качестве разделителя полей по умолчанию — нет, он использует любую последовательность непрерывных символов пробела.
Ответ №1:
Просто установите FS на tab:
awk -F't' '....'
Комментарии:
1. Должен ли я иметь следующее условие для проверки, является ли поле null:
if ($i == "") {//do something}
?2. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что после последнего поля в каждой строке могут быть дополнительные таблицы. Таким образом, есть дополнительные выходные данные, которых не должно быть. Как мне это исправить?
3. @Alias: удалите лишние вкладки. Каждая вкладка означает, что есть дополнительное поле. AWK не может определить, где, по вашему мнению, вкладка является полем, а где нет. Вы могли бы удалить строки в конце, но как насчет пропущенных значений для
Col3
, тогда?