Linux 如何拆分文件以获取shell参数?
我有一个文件的问题,我需要划分这一行的每一行,并将它们作为参数发送到另一个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
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的版本,我就不能再多说了。