【问题标题】:Shell script to separate values in each line and put it in two variables [duplicate]Shell脚本将每行中的值分开并将其放入两个变量中[重复]
【发布时间】:2015-12-10 12:14:42
【问题描述】:

我有一个文本文件,每行有 2 个值。我需要将这两个值放在两个不同的变量中,即 var 和 var2 并对每一行进行进一步处理。分隔符是两个变量之间的空格。


使用问题中可用的一些格式将评论转换为问题中的信息。

我有一个文本文件,abc.txt:

apple jobs
microsoft gates

我想要$var 中的“apple”,$var2 中的“jobs”,从第一行开始;迭代时相同的东西应该在相同的$var$var2 中给我'microsoft' 和'gates'。当我使用时:

var=`awk -F' ' '{print $1}' abc.txt`

它给了我var 中的“apple”、“jobs”和“microsoft”以及var2 中的“gates”。

【问题讨论】:

  • 你试过什么?您打算使用哪个命令?您是否阅读过read 的手册页?为什么不?您正在寻求做的是read 命令的一个非常基本的应用程序——尽管如果处理需要awk,这也是处理数据的好方法。哪个更好取决于“进一步处理”。
  • 目前我可以在一行中分隔两个值。问题在于多行。我目前能够读取每一行并打印它们的计数。
  • 您需要展示您所拥有的,并解释其中的原因,以便我们为您提供帮助。如果您可以分离这些值,我不知道问题出在哪里。您是否对每一行都有不同的变量?你考虑过数组吗?
  • @SnigdhaGayatri 请编辑您的问题,提供文件示例、预期结果以及您已经厌倦的内容。它是文本文件中的单行吗?每一对都在自己的线上吗?
  • 请:用额外的信息更新问题,以便您可以整齐地格式化它。要缩进代码或数据,请在编辑框中输入您希望其显示的 if,然后选择它,然后使用编辑框上方的 {} 按钮缩进所选内容。

标签: linux bash unix awk sh


【解决方案1】:

假设您的输入文件为

$ cat var2
a b
c d

如果你想将每一行的两个值赋给两个变量并循环操作,你可以这样做

$ while read a b; do echo "two vars are: " $a $b; done < var2
two vars are:  a b
two vars are:  c d

每次迭代都会重新分配源文件中的值。

【讨论】:

  • while read a b 会在读取数据时损坏数据。始终使用while IFS= read -r a b,除非您有特定的理由不完全理解所有注意事项(在这种情况下,您需要的不是IFS=)。
  • 我不同意这个评论,@EdMorton。我相信你会不同意我的不同意见;这是给定的。因此,我将我的反对意见记录在案,我们可以将讨论留在那里。如果您想讨论它,请不要记录在案;我的电子邮件在我的个人资料中。
  • @JonathanLeffler 你不同意什么?当文件包含a\tb 时尝试read a &lt; file,您会发现a 填充有atb,而不是a\tb,就像使用read -r a &lt; file 一样。我不想对此进行辩论,IFS= read -r var 是如何在 shell 中正确读取文件的开始(您还应该对文件描述符做其他事情,但它们通常不会真正产生问题)。
猜你喜欢
  • 2021-07-04
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 2015-01-02
  • 2011-08-24
  • 2022-01-25
  • 2021-11-29
  • 1970-01-01
相关资源
最近更新 更多