对于第一个列号,我希望用此脚本处理的结果替换该编号,bin.sh
#!/bin/bash
cd /tmp
rm bin.txt
echo "obase=2;$1" | bc > bin.txt
sleep 2
value=`cat bin.txt`
sed -i 's/.*\(................\)/\1/' bin.txt
sleep 2
echo "$((2#`cat bin.txt`))" 顶部行的示例手动运行:
root@vk4tux:/tmp# bin.sh 1023001
39961
root@vk4tux:/tmp# 因此,对于文件中的每一行单独处理到bin.sh输入输出替换,1023001将被替换为39961等等。
发布于 2018-10-25 07:18:04
使用awk:
$ awk '{ $1 -= lshift(rshift($1,16),16); print }' 这将删除输入数据第一列中的低16位信息以外的所有内容,这是脚本似乎要做的事情。
若要更忠实地再现输入数据的表格格式,请通过column -t传递结果。
使用shell循环:
while read -r num stuff; do
printf '%d %s\n' "$(( num - (( num >> 16 ) << 16) ))" "$stuff"
done 如果希望打印每一行的4秒钟延迟,请在shell循环中插入适当的sleep调用,或者在awk代码中调用system("sleep N"),其中N是一些正数。
使用原始脚本:
while read -r num stuff; do
printf '%d %s\n' "$( ./bin.sh "$num" )" "$stuff"
done 也就是说,用从文件中读取的数字调用命令替换中的脚本。但是请注意,在大型文件上,这将是非常低效的,因为脚本调用了几个外部实用程序来进行计算,此外,它还无条件地破坏了一个文件(/tmp/bin.txt),并将其抛在后面。我可能会亲自使用awk脚本。
相关信息:
https://unix.stackexchange.com/questions/477676
复制相似问题