Shell script to separate values in each line and put it in two variables
我有一个文本文件,每行有两个值。我需要将这两个值放在两个不同的变量中,即var和var2,并对每一行做进一步的处理。分隔符是两个变量之间的空格。
注释使用问题中可用的某些格式转换为问题中的信息。
我有一个文本文件,abc.txt:
1 2
| apple jobs
microsoft gates |
我要"苹果"在$var中,"乔布斯"在$var2中从第一行开始;同样的事情,当迭代时,应该给我"微软"和"盖茨"在同一个$var和$var2中。当我使用时:
1
| var=`awk -F' ' '{print $1}' abc.txt` |
号
它给了我"苹果"、"乔布斯"和"微软"在var和"盖茨"在var2中。
- 你试过什么?您打算使用哪个命令?你读过read的手册页了吗?为什么不?您要做的是一个非常基本的read命令应用程序——尽管如果处理需要awk,这也是一种处理数据的好方法。哪个更好取决于"进一步处理"。
- 目前,我可以在一行中分离两个值。问题在于多行。我目前能够读取每一行并打印它们的计数。
- 你需要展示你所拥有的,并解释它是怎么回事,这样我们才能帮助你。我不知道如果你能把这些值分开会有什么问题。你在为每一行寻找不同的变量吗?你考虑过阵列吗?
- @斯尼格达盖亚特里,请编辑你的问题,以一个文件的例子,预期的结果,以及你已经累了什么。它是文本文件中的单行吗?每一对都在各自的生产线上吗?
- 我有一个文本文件abc.txt:第一行是"Apple Jobs",第二行是"Microsoft Gates"。我想要苹果在$var,作业在$var2从第一行,同样的事情,当迭代SHD给我MSOFT和盖茨在相同的$var和$var2。当我使用var='awk-f''打印$1'abc.txt时,它在var中为我提供了Apple、Jobs和Microsoft,在var2中为盖茨。
- 请:用额外的信息更新这个问题,这样你就可以把它整齐地格式化。要缩进代码或数据,请在编辑框中键入要显示的代码或数据,然后选择该代码或数据,然后使用编辑框上方的{}按钮来缩进所选内容。
- 您应该从显示的命令中获取"apple microsoft"中的var。"jobs"和"gates"都不应该出现在其中。在此上下文中不应使用awk。一般来说,你应该用var=$(…)代替反勾号(var=`…` )。
- @Snigdhagayatri你几乎肯定是完全错误的,你应该用awk来完成整个工作,而不是试图将文本读取到shell变量中,因为shell不是一个很好的工具来操作文本,而awk是。如果您告诉我们您打算如何处理这些变量并显示整个脚本的预期输出,我们可以帮助您。
- 感谢您的帮助,请在这里找到答案unix.stackexchange.com/questions/113750/…
假设输入文件为
如果要将每行中的两个值赋给两个变量并在循环中操作它们,可以这样做。
1 2 3
| $ 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。我相信你会不同意我的意见的,这是一个既定的事实。所以我把我的反对意见记录在案,我们可以把讨论留在那里。如果你想讨论这个问题,那就不做记录;我的电子邮件在我的个人资料中。
- @你不同意什么?当文件包含a\tb时,尝试read a < file,您会发现a是由atb填充的,而不是像使用read -r a < file填充的那样由a\tb填充。我不想对此进行辩论,IFS= read -r var是如何在shell中正确读取文件的开始(您还应该处理文件描述符,但它们通常不会造成问题)。