如何在每次运行后修改bash脚本?

时间:2016-11-14 16:42:13

标签: bash awk

以下Script1.sh在每个文件中使用1st(键)和第2列(值),并根据other_scripts.sh中的某些代码输出一些输出。 script2.sh只是同时运行script1.sh和others_script.sh。

现在,是否可以将类似的过程扩展到第1列和第3列(output.n2)并重复该过程(output.nn)?

注意:我有大约20k列。每个文件都有相同的确切列数。

$ cat file1

s   n1  n2  n3
s1  2   3   4
s2  3   4   5
s3  0   1   4
s4  9   8   7

$ cat file2

s   n1  n2  n3
s1  12  13  14
s2  13  14  15
s3  10  11  14
s4  19  18  17

$ cat file3

s   n1  n2  n3
s1  12  33  44
s2  13  43  54
s3  10  13  44
s4  19  83  74

$ cat filen

s   n1  n2  n3
s1  25  33  40
s2  35  43  50
s3  50  13  40
s4  95  83  70

script1.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

other_scripts.sh

grep file r.1 |awk '{print $1"\t"$2"\t"$3*100}' > output.n1
rm r.1

script2.sh

sh script1.sh
sh other_scripts.sh

output.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

1 个答案:

答案 0 :(得分:-1)

尝试使用此脚本。这样可以准确再现您提供的输入所需的输出。

#!/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 <name of the file>)并在包含所有文件的目录中运行脚本(./<name of the file>)。请务必将正确的数字设为NUMBER_OF_COLUMNSNUMBER_OF_FILES