【发布时间】:2020-01-17 20:19:30
【问题描述】:
我的文件有问题,我需要把它的每一行分开并将它们作为参数发送到另一个 shell。该文件包含以下几行
20191224900|1
20191230901|1
20200107905|1
2020020891|1
2020010984|1
比如第一行要这样分割
19
12
24
900
第二行要这样分割
19
12
30
901
对于每个循环,必须将这些数字发送到另一个 shell
例子:
another_shell $19 $12 $30 $901
但是当我运行测试时,我得到的唯一结果是文件按列划分,我需要对每一行单独应用拆分并发送参数
while read line;
do
echo "year"
awk '{print substr($1,3,2)}'
echo "month"
awk '{print substr($1,5,2)}'
echo "day"
awk '{print substr($1,7,2)}'
echo "store"
sed 's/|1//' REPROCESO_VTA_20200107.txt | awk '{print substr($1,9,3)}'
done < REPROCESO_VTA_20200107.txt
【问题讨论】:
-
another_shell $19 $12 $30 $901肯定是不对的。这是试图传递当前 shell 的位置参数,包括 901st,这没有多大意义,尤其是在上下文中。你的意思是another_shell 19 12 30 901? -
@JohnBollinger 没有花括号,它相当于
another_shell ${1}9 ${1}2 ${3}0 ${9}01,我也认为这不是意图...... -
你是对的,@BenjaminW.,我的错。而且我认为这不太可能是 OP 真正想要的。
-
你构建 while 循环的方式是错误的。
while read line将读取 1 行输入。awk然后将消耗其余的输入。然后sed将读取整个文件。然后read会尝试读取失败,循环只进行一次迭代。
标签: linux shell file split parameters