Как передать содержимое файла в параметр / параметр функции

Я думаю, что теперь разобрался со следующим, на случай, если кто-то еще прочитает это и ему понадобится это. Спасибо еще раз.

FNR == NR {
    for (i = 2; i <= NF; i++) { a[i,$1] = $i }
    b[$1];
    next;
}
($1 in b) {                   # check if row in file2 existed in file1
    for (i = 2; i <= NF; i++) {
        if (a[i,$1] == $i)
            printf("%s->col%d: %s vs %s: Valid\n", $1, i-1, a[i,$1], $i);
        else
            printf("%s->col%d: %s vs %s: Failure\n", $1, i-1, a[i,$1], $i);
    }
    delete b[$1];   # delete entries which are processed
}

END {
    for (left in b) {   # look which didn't match
        for (i = 2; i <= NF; i++) 
            printf("%s->col%d: %s vs (blank): Not Equal\n", left, i-1, a[i,left])
    }
}
1
26.04.2017, 03:16
2 ответа

Расширение ответа Gilles:

parallel 'head -n "$(cat {1})" {2}' ::: File1s* :::+ Corresponding_File2s*

Вероятно, у вас много файлов File1, которые вы хотите связать с файлами File2. Функция :::+ делает это.

0
27.01.2020, 23:45

Используйте подстановку команды.

head -n "$(cat File1)" File2

Подстановка команды вводит вывод команды в командную строку. Новые строки в конце вывода удаляются, а это именно то, что вам здесь нужно.

Альтернативно, в bash (но не в других вариантах sh), вы можете использовать mapfile встроенный модуль для загрузки файла построчно.

mapfile lines <File1
head -n "${lines[0]}" File2

Строки загружаются в массив, поэтому номер строки n будет ${lines[n]}. Для первой строки bash также позволяет написать $line.

1
27.01.2020, 23:45

Теги

Похожие вопросы