【问题标题】:looping over different list files, retrieving always the sam Eline循环遍历不同的列表文件,总是检索相同的行
【发布时间】:2018-12-03 13:38:40
【问题描述】:

我有三个文件,其中包含我需要稍后用于应用​​功能的文件列表。 我设法创建了一个遍历 3 个不同文件的循环,但不完全是我需要的输出。 我的输入: rw_sorted_test.txt

1
2
3

fwd_sorted_test.txt

A
B
C

run_list.txt

1st
2nd
3rd

我是这样运行的:

    for f in `cat rw_sorted_test.txt`; do for l in `cat fwd_sorted_test.txt`; do for r in `cat run_list.txt` do echo ${f} ${l} ${r}; done; done; done;

我现在得到的是这样的:

1 A 1st
1 A 2nd
1 A 3rd
2 A 1st
2 A 2nd
2 A 3rd
3 A 1st

(...)

我正在寻找的是这样的:

1 A 1st
2 B 2nd
3 C 3rd

我相信这会很简单,但我真的是初学者,所有的解决方法都没有奏效。 另外,我怎样才能让它在回显我想要的输出后运行? 谢谢

【问题讨论】:

  • 如果你嵌套 3 个循环,每个循环由 3 个项目组成,当然你得到 3**3 = 27 个项目。如果你只想要 3 个项目,你必须只使用一个循环(loop)。
  • 如何转换成一个循环并仍然从每个文件中获取结果?我已经尝试在cat rw_sorted_test.txt 中为 f 为 cat fwd_sorted_test.txt 中的 l 为 cat runlist_test.txt 中的 r;做回声${f} ${l} ${r};完毕;完毕;完毕;但这会以不同的顺序导致相同的事情。如果我只放第一个 for,我只能让它运行 3 次,但是我需要检索其他文件上的行。

标签: list loops unix echo


【解决方案1】:

快速尝试,如果你需要这个:

exec 4< run_list.txt
exec 5< rw_sorted_test.txt
for a in $(cat fwd_sorted_test.txt); do
  read run <&4 
  read sort <&5
  echo "$sort $a $run"
done

...输出为:

1 1st A
2 2nd B
3 3rd C

文件也应该关闭:

exec 4<&-
exec 5<&-

重点是做一个循环,从 3 个不同的文件中一次读取一行。为输入而打开的文件 (exec ...

一些参考可以在这里找到:How do file descriptors work?

或对 bash 文件描述符进行一些研究。希望对您有所帮助。

【讨论】:

  • 非常感谢您的帮助,以及对额外知识获取的积极投入。
  • 此外,您的解决方案非常适合集成运行工具所需的命令
【解决方案2】:

您可以将其用作在awk 中编写程序的测试用例:
3 个输入文件,将行存储在数组中并在 END 块中打印所有内容。

在这种情况下,您可以使用另一个更简单的程序:

paste -d" " rw_sorted_test.txt fwd_sorted_test.txt run_list.txt

【讨论】:

  • 如此聪明的方法。太简单!但是,是的,我会用这些小东西作为我可以学习的练习工具。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
相关资源
最近更新 更多