当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
)。 / p>
重击:
while IFS=, read -r first second; do
if [[ "$first" == lemur ]]; then
# echo the entire line
fi
done < input.txt
在这种简单的情况下,通过回显$first
和$second
变量并用逗号之间的逗号来重新创建原始行并不难。但是在更复杂的情况下,IFS
可能不止一个字符并且可能有许多字段,除非在读取操作期间 bash 对其进行了维护,否则很难准确地重新创建原始行
答案 0 :(得分:5)
可能您必须使用2个不同的read
之类的
while read -r line; do
IFS=, read first second <<<"$line"
if [[ $first == lemur ]]; then
printf '%s\n' "$line"
fi
done < input.txt