如何在每次运行后修改bash脚本?
下面的Script1.sh在每个文件中使用第1列(键)和第2列(值),并根据其他_scripts.sh中的一些代码打印一些输出。script2.sh只是同时运行script1.sh和其他脚本 现在,是否可以将类似的过程扩展到第1列和第3列(output.n2)并重复该过程(output.nn) 注意:我有大约20k列。每个文件都有相同的精确列数 $cat文件1如何在每次运行后修改bash脚本?,bash,awk,Bash,Awk,下面的Script1.sh在每个文件中使用第1列(键)和第2列(值),并根据其他_scripts.sh中的一些代码打印一些输出。script2.sh只是同时运行script1.sh和其他脚本 现在,是否可以将类似的过程扩展到第1列和第3列(output.n2)并重复该过程(output.nn) 注意:我有大约20k列。每个文件都有相同的精确列数 $cat文件1 s n1 n2 n3 s1 2 3 4 s2 3 4 5 s3 0 1 4 s4 9 8
s n1 n2 n3
s1 2 3 4
s2 3 4 5
s3 0 1 4
s4 9 8 7
$cat文件2
s n1 n2 n3
s1 12 13 14
s2 13 14 15
s3 10 11 14
s4 19 18 17
$cat文件3
s n1 n2 n3
s1 12 33 44
s2 13 43 54
s3 10 13 44
s4 19 83 74
$cat文件
s n1 n2 n3
s1 25 33 40
s2 35 43 50
s3 50 13 40
s4 95 83 70
脚本1.sh
awk '{print $1"\t"$2}' file1 | awk '{print $1"\t""file1""\t"$2}' >> r.1
awk '{print $1"\t"$2}' file2 | awk '{print $1"\t""file2""\t"$2}' >> r.1
awk '{print $1"\t"$2}' file3 | awk '{print $1"\t""file3""\t"$2}' >> r.1
awk '{print $1"\t"$2}' filen | awk '{print $1"\t""filen""\t"$2}' >> r.1
其他_scripts.sh
grep file r.1 |awk '{print $1"\t"$2"\t"$3*100}' > output.n1
rm r.1
脚本2.sh
sh script1.sh
sh other_scripts.sh
产出1.n1
s1 file1 200
s2 file1 300
s3 file1 0
s4 file1 900
s1 file2 1200
s2 file2 1300
s3 file2 1000
s4 file2 1900
s1 file3 1200
s2 file3 1300
s3 file3 1000
s4 file3 1900
s1 filen 2500
s2 filen 3500
s3 filen 5000
s4 filen 9500
试试这个脚本。这将使用您提供的输入精确地再现您所需的输出
#!/bin/bash
NUMBER_OF_COLUMNS=3
NUMBER_OF_FILES=4 # Assuming the files are like file{n}
for coln in `seq 1 $NUMBER_OF_COLUMNS`; do
for filen in `seq 1 $NUMBER_OF_FILES`; do
awk -v n=$coln -v filen=$filen 'NR>1{printf"%s\tfile%i\t%s\n", $1, filen, $(1+n)*100}' file$filen >> output.$coln
done
done
将其复制到文件中,使其可执行(
chmod+x
),并在包含所有文件的目录中运行脚本(/
)。请记住将正确的数字作为NUMBER\u OF_COLUMNS
和NUMBER\u OF_FILES
哦,非常感谢。但是每次添加一个数字时,我都需要运行script2.sh。我认为我的帖子让很多用户感到困惑,而且没有输入的例子(对不起)。这就是为什么他们投了反对票:(现在我编辑了这个问题。希望它现在清楚了?不,不清楚。我得到了以下输出,例如output.n1s file0 0
让我们看看。要弄清楚您对数据实际做了什么有点困难。您能为您的问题添加一些示例输入和预期输出,以便我们可以测试答案吗?这是almo确保有更好的方法来实现你正在做的事情,不管是什么,解决根本问题比仅仅帮助你实现一个不太理想的解决方案要好将变量写入单独的数据文件,在脚本中读取并更新。将代码和数据分开--违反该规则会导致数据丢失、SCM内容混乱、安全漏洞(不以代码形式运行数据是避免注入攻击的最重要步骤)此外,在构建代码示例时,请尝试遵循以下指导原则:代码示例应该是最小的、完整的和可验证的。“最小”意味着它应该尽可能小,同时仍然演示问题;“完整的”和“可验证的”这意味着其他人应该能够复制/粘贴/运行您的代码示例,并看到您询问的相同错误;事实上,这是伪代码,无法运行。感谢您的宝贵意见。现在我编辑了这个问题。希望现在已经清楚了?其他脚本。sh
将仅在输出中复制文件1
。您如何定义在script1.sh中,像“AA”
这样的字符串是否与文件的编号有关?