gpt4 book ai didi

bash - 而读循环只处理第一行;

转载 作者:行者123 更新时间:2023-12-05 03:14:45 28 4
gpt4 key购买 nike

我有一个包含多行的文件,我想对每一行执行以下操作。

  1. 从 awk 输出中设置三个变量。
  2. 对变量数据做一些事情(在我的例子中,回显它们)。

我的脚本成功地完成了我想要的,但是只针对文件的第一行。

#!/bin/bash

while read LINE; do
set -- $(awk -F";" '{print $1, $2, $3}')
var1=$1
var2=$2
var3=$3

echo $1
echo $2
echo $3

done < /path/file

文件数据示例:

NPK;20140325;272128;4579
NPK;20140329;272826;4977
NPK;20140320;271832;4248
NPK;20140415;273213;6698
NPK;20140406;272703;5708
NPK;20140408;272204;5811
NPK;20140324;271966;4465
NPK;20140401;272507;5253
NPK;20140403;272638;5487

有什么想法吗?

欢呼M

最佳答案

你的 awk语句没有显式输入,因此它消耗了 stdin 的其余部分input - 输入文件的剩余行。

您必须通过 $LINE显式变量为 awk命令,您可以使用此处的字符串执行此操作,即 <<< $LINE :

while read LINE; do

set -- $(awk -F";" '{print $1, $2, $3}' <<< $LINE)
var1=$1
var2=$2
var3=$3

echo $1
echo $2
echo $3

done < /path/file

但是,您可以通过让 read 大大简化您的循环做所有的解析:

while IFS=\; read var1 var2 var3 unused; do

echo $var1
echo $var2
echo $var3

done < /path/file

关于bash - 而读循环只处理第一行;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23123023/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com