以下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
答案 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_COLUMNS
和NUMBER_OF_FILES
。