提问人:juylmin 提问时间:2/15/2022 最后编辑:juylmin 更新时间:2/21/2022 访问量:1555
从同一行分配两个不同的变量,并为每行循环 [duplicate]
assign two different variables from same line and loop for every line [duplicate]
问:
我正在尝试从 2 列 txt 文件中分配 awk 获取的变量。 到命令,该命令将每两个值作为两个变量包含在其中。
例如,我使用的文件是;
foo.txt
10 20
33 40
65 78
我的命令旨在打印;
end=20 start=10
end=40 start=33
end=78 start=65
基本上,我想迭代每一行的代码,对于输出,输入文件的两列中将有两个变量。
我不是一个笨拙的专家(我正在尽力而为),到目前为止我能做的就是这种融合;
while read -r line ; do awk '{ second_variable=$2 ; first_variable=$1 ; }' ; echo "end=$first_name start=$second_name"; done <foo.txt
但它只给出这个输出;
end= start=
只有一次,没有任何变量。我将不胜感激任何建议。谢谢。
答:
0赞
KamilCuk
2/15/2022
#1
就在 Bash 中:
while read -r end start; do echo "end=$end start=$start"; done <foo.txt
评论
3赞
Cyrus
2/15/2022
我建议用 .end start
start end
3赞
pmf
2/15/2022
#2
在你只需要 和 :bash
while
read
printf
while read -r start end
do printf 'end=%d start=%d\n' "$end" "$start"
done < foo.txt
end=20 start=10
end=40 start=33
end=78 start=65
使用 ,您可以执行以下操作:awk
awk '{print "end=" $2, "start=" $1}' foo.txt
end=20 start=10
end=40 start=33
end=78 start=65
使用正则表达式:sed
sed -E 's/([0-9]+) ([0-9]+)/end=\2 start=\1/' foo.txt
end=20 start=10
end=40 start=33
end=78 start=65
评论
0赞
juylmin
2/15/2022
我想问一些关于第一个代码的问题;当读取 -r 开始结束时,请 printf 'end=%d start=%d\n' “$end” “$start” < foo 完成.txt 究竟是哪个部分在分配变量?如果我想做别的事情,而不仅仅是打印它们,我需要两者。谢谢。
0赞
pmf
2/15/2022
read -r start end
从 stdin 中读取一行,并将前两个字段分别分配给变量 和 (顺序很重要)。为了读取更多列,只需添加更多变量名称即可。将部件更改为要访问变量的任何操作。$start
$end
do
0赞
Weihang Jian
2/21/2022
#3
使用呢?xargs
xargs -n2 sh -c 'echo end=$1 start=$2' sh < file.txt
演示
xargs -n2 sh -c 'echo end=$1 start=$2' sh <<INPUT
10 20
33 40
65 78
INPUT
输出
end=10 start=20
end=33 start=40
end=65 start=78
评论
awk
awk
awk