【发布时间】:2019-03-01 10:01:16
【问题描述】:
当awk 使用分隔符将一行拆分为多个字段时,它会在$0 变量中保留原始行。因此,它可以在对各个字段执行操作后打印原始行(假设没有其他任何修改 $0)。 bash 的read 可以做类似的事情,它不仅有单个元素,而且有整行?
例如,使用以下input.txt
foo,bar
baz,quz
我试图在 bash 中模仿的 awk 行为是:
awk -F, '($1 == "baz") {print $0}' input.txt
这将打印baz,quz,因为$0 是读取的整行,即使该行也被分成两个字段($1 和$2)。
重击:
while IFS=, read -r first second; do
if [[ "$first" == lemur ]]; then
# echo the entire line
fi
done < input.txt
在这种简单的情况下,通过在$first 和$second 变量之间用逗号回显来重新创建原始行并不难。但在更复杂的场景中,IFS 可能不止一个字符并且可能有很多字段,除非 bash 在读取操作期间维护它,否则准确地重新创建原始行变得更加困难。
【问题讨论】: