Когда awk
разбивает строку на поля с помощью разделителя, она сохраняет исходную строку в переменной $0
.Таким образом, он может напечатать исходную строку (при условии, что ничего не изменит $0
) после выполнения операций над отдельными полями.Может ли bash's read
сделать что-то подобное, когда в нем есть не только отдельные элементы, но и вся строка?
Например, со следующими input.txt
foo,bar
baz,quz
awk
поведение, которое я пытаюсь имитировать в bash: awk -F, '($1 == "baz") {print $0}' input.txt
Это выведет baz,quz
, потому что $0
- это целая строка, которая была прочитана, даже если строка была также разбита на два поля ($1
и $2
).
Bash:
while IFS=, read -r first second; do
if [[ "$first" == lemur ]]; then
# echo the entire line
fi
done < input.txt
В этом простом случае не было бы слишком сложно воссоздать исходную строку, повторивпеременные $first
и $second
с запятой между ними.Но в более сложных сценариях, где IFS
может содержать более одного символа и может быть много полей, становится намного сложнее точно воссоздать исходную строку, если bash не поддерживает ее во время операции чтения.