Linux 如何拆分文件以获取shell参数?

Linux 如何拆分文件以获取shell参数?,linux,shell,file,split,parameters,Linux,Shell,File,Split,Parameters,我有一个文件的问题,我需要划分这一行的每一行,并将它们作为参数发送到另一个shell。该文件包含以下行 20191224900|1 20191230901|1 20200107905|1 2020020891|1 2020010984|1 例如,第一行必须像这样分开 19 12 24 900 19 12 30 901 第二行必须像这样划分 19 12 24 900 19 12 30 901 对于每个循环,必须将这些数字发送到另一个shell 例如: another_shel

我有一个文件的问题,我需要划分这一行的每一行,并将它们作为参数发送到另一个shell。该文件包含以下行

20191224900|1
20191230901|1
20200107905|1
2020020891|1
2020010984|1
例如,第一行必须像这样分开

19
12 
24 
900
19 
12
30
901
第二行必须像这样划分

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
读行时
;
做
回音“年”
awk{打印子文件($1,3,2)}
回音“月”
awk{打印子文件($1,5,2)}
回声“日”
awk{打印子文件($1,7,2)}
回声“商店”
sed's/| 1/'REPROCESO_VTA_20200107.txt | awk'{print substr($1,9,3)}
完成
在您的代码中


一个非常脆弱的想法:只需添加一些空格。假设您的
另一个\u shell
实际上不是一个shell,而只是一些命令,您可以执行以下操作:

$ cat a.sh
#!/bin/sh

cat << EOF |
20191224900|1
20191230901|1
20200107905|1
2020020891|1
2020010984|1
EOF
sed -E 's/(..)(..)(..)(..)([^|]*)/\1 \2 \3 \4 \5 /' |
while read _ one two thre four _; do
        echo "$one" "$two" "$thre" "$four"
done
$ ./a.sh
19 12 24 900
19 12 30 901
20 01 07 905
20 02 08 91
20 01 09 84
$cat a.sh
#!/垃圾箱/垃圾箱

cat肯定
另一个shell$19$12$30$901
是不对的。这是试图传递当前shell的位置参数,包括901st,这没有多大意义,尤其是在上下文中。你是说另一个shell 19 12 30 901
?@JohnBollinger如果没有大括号,就相当于另一个shell${1}9${1}2${3}0${9}01
,我也认为这不是故意的……你是对的,@BenjaminW.,我的错。我认为这更不可能是OP真正想要的。你构建while循环的方式是错误的<代码>读取行时将读取一行输入
awk
然后将消耗其余的输入。然后
sed
将读取整个文件。然后,
read
将尝试读取并失败,循环只经过一次迭代。我在应用此解决方案-->指定的替换对该命令无效时收到此消息,此环境中的shell已过期。我要继续工作。感谢您,这似乎与上面的具体建议不太可能相关,@CristopherVergara,但如果不知道您使用的shell的版本,我就不能再多说了。