使用bash for循环获取文件在另一个文本文件中写入的文件内容

时间:2017-02-11 17:36:24

标签: linux bash

我正在尝试获取文件在另一个文本文件中写入的文件内容

我的节目是:

for i in $(cat FILE)
do
    echo $i
done

我希望结果是

OBJECT1
OBJECT2
LINE1
LINE2

但结果只是

aa
bb

该程序未读取 aa bb

的内容

文件名和内容如下:

文件:

aa
bb

AA

OBJECT1
OBJECT2

BB

LINE1
LINE2

3 个答案:

答案 0 :(得分:3)

以下是我认为您要做的事情。

假设:

$ cat FILE
aa
bb
$ cat aa
OBJECT1
OBJECT2
$ cat bb
LINE1
LINE2

你可以这样做:

$ while IFS= read -r fn || [[ -n $fn ]]; do cat "$fn"; done <FILE
OBJECT1
OBJECT2
LINE1
LINE2

说明:

  1. <FILE读取文件FILE并将内容重定向到while循环
  2. while IFS= read -r fn; do ... done定义while loop。将CR终止的每一行的文件读入fn。前导和尾随空格的IFS= prevents the trimming-r选项可防止反斜杠解释。
  3. 如果文件|| [[ -n $fn ]]的最后一行未以FILE终止,则
  4. \n返回true以使循环继续。如果知道您的文件已终止,则不需要此部分。
  5. cat "$fn"使用引用的文件名“$ fn”运行程序cat。如果存在诸如“big file.txt”
  6. 之类的名称,则需要引用它以保持文件名完整

答案 1 :(得分:0)

while read LINE; do cat "$LINE" done <FILE 应该工作得很好。所有$(cat)版本都使用子shell来执行外部命令(cat),这至少不是最佳的。上面使用纯bash循环遍历FILE的每一行,并cat读取文件。

答案 2 :(得分:-1)

试试这个:

    for i in $(cat FILE)
do
for e in $(cat "$i")
do
    echo "$e"
done
done

我认为这就是你想要的。