我有一个包含2列的文件。对于每一行,我需要将两个参数插入变量:var1
应获取第一个值,var2
获取第二个值
输入文件例如:
38452 d0337358
38453 d0337357
38454 d0337363
我使用set
和cut
执行此操作:
foreach f (cat file)
foreach? set var1 = ( echo $f | cut -f1 -d- )
foreach? set var2 = ( echo $f | cut -f2 -d- )
foreach? echo $var1
foreach? end
但是作为输出我得到了:
38452
d0337358
38453
d0337357
38454
d0337363
而不仅仅是第一列的参数。
有人能指出foreach
身上的问题吗?或者有人知道更好的方法吗?
答案 0 :(得分:0)
如果要循环浏览文件并分别读取每一列,可以像这样使用while
循环:
while IFS=" " read -r var1 var2
do
echo "var1=$var1, var2=$var2"
done < file
请注意,您使用的是foreach
,这在Bash中不存在。此外,不需要set
个变量:只需说var="value"
设置它们。
IFS=" "
将字段分隔符设置为空格。sets the first word to the variable
$ var1 and the rest to the variable
$ var2`。while; do ... done < file
是一种处理文件的好方法,它通过间接<
提供内容。$ while IFS=" " read -r var1 var2; do echo "var1=$var1, var2=$var2"; done < a
var1=38452, var2=d0337358
var1=38453, var2=d0337357
var1=38454, var2=d0337363
答案 1 :(得分:0)
问题在于&#34; cat file&#34;读取文件的内容。它使用空格作为分隔符,而不是行尾。
这是一个简单的解决方案,假设输入文件总是有2列:
set n = 1
foreach f ( `cat file` )
if ( $n % 2 == 1 ) then
set var1 = $f
else
set var2 = $f
echo $var1
endif
@ n++
end