为什么awk'{print}'不会启动新行,而是循环空格char

时间:2010-12-30 19:17:21

标签: shell awk

我有这个shell脚本

#!/bin/bash

LINES=$(awk '{ print }' filename.txt) 
for LINE in $LINES; do
  echo "$LINE"
done

并且filename.txt具有此内容

Loreum ipsum dolores 
Loreum perche non se imortale

shell脚本正在迭代filename.txt中所有行的空格,而它应该只循环那两行。

但是当我在终端输入“awk'{print}'filename.txt”时,它会循环好。 有什么解释吗?

提前致谢!

3 个答案:

答案 0 :(得分:3)

$(...)构造将来自awk的 all 输出吸收为一个大字符串,然后for LINE in $LINES在空格上分割。你想要这个结构:

#! /bin/sh

while read LINE; do
    printf '%s\n' "$LINE"
done < filename.txt

答案 1 :(得分:1)

其他答案都很好,您可以做的另一件事是临时更改您的IFS(内部字段分隔符)变量。如果您将shell脚本更新为如下所示:

#!/bin/bash

IFS="
"
LINES=$(awk '{ print }' filename.txt) 
for LINE in $LINES; do
  echo "$LINE"
done

这会将IFS更新为换行符,而不是''也应该做你想要的。

只是另一个建议。

答案 2 :(得分:0)

您需要将LINES作为数组循环,因为所有行都存储为数组。

以下是如何循环划线的示例:

http://tldp.org/LDP/abs/html/arrays.html#SCRIPTARRAY