尝试将整个文件夹的相同格式的文件合并到合并文件中。
head File1.txt
11 116701285 204
11 116701286 209
11 116701287 209
11 116701288 208
11 116701289 209
11 116701290 208
11 116701291 208
11 116701292 210
11 116701293 209
11 116701294 213
head File2.txt
11 116701285 188
11 116701286 192
11 116701287 191
11 116701288 191
11 116701289 191
11 116701291 191
11 116701292 194
11 116701293 194
11 116701294 199
.........
head FileN.txt
11 116701285 190
11 116701286 192
11 116701287 191
11 116701288 189
11 116701289 191
11 116701290 192
11 116701291 193
11 116701292 197
11 116701293 196
11 116701294 199
所需的输出(前两列之后的列数对应于文件数。前两列在所有文件中都相同。文件中没有标题)
11 116701285 188 204 190
11 116701286 192 209 192
11 116701287 191 209 191
11 116701288 191 208 189
11 116701289 191 209 191
11 116701290 191 0 192
11 116701291 191 208 193
11 116701292 194 210 197
11 116701293 194 209 196
11 116701294 199 213 199
如果该条目不存在,请填写0.使用连接但只能执行两个文件。
答案 0 :(得分:3)
您可以使用此awk
:
awk '{
k=$1 OFS $2
}
FNR == NR {
v[++n] = k
}
{
a[ARGIND,k] = $3
}
END {
for(j=1; j<=n; j++) {
printf "%s", v[j]
for (i=1; i<ARGC; i++)
printf "%s", OFS ((i,v[j]) in a ? a[i,v[j]] : 0)
print ""
}
}' File*.txt | column -t
11 116701285 204 188 190
11 116701286 209 192 192
11 116701287 209 191 191
11 116701288 208 191 189
11 116701289 209 191 191
11 116701290 208 0 192
11 116701291 208 191 193
11 116701292 210 194 197
11 116701293 209 194 196
11 116701294 213 199 199
如果您想要一个衬垫,请使用:
awk '{k=$1 OFS $2} FNR==NR{v[++n]=k} {a[ARGIND,k] = $3} END{for(j=1; j<=n; j++) {printf "%s", v[j]; for (i=1; i<ARGC; i++) printf "%s", OFS ((i,v[j]) in a ? a[i,v[j]] : 0); print ""}}' File*.txt
column -t
用于表格输出。
答案 1 :(得分:1)
您能否请关注awk
并告诉我这是否对您有所帮助。
awk 'FNR==NR{a[$1,$2]=$3;next} {a[$1,$2]=a[$1,$2]?a[$1,$2] OFS $3:$3} END{for(i in a){print i,a[i]}}' File*.txt
答案 2 :(得分:0)
这对你有用:
#!/bin/bash
## Assuming all your file are named as *FileN.txt* and so on
endresult="$( awk '{print $1 "\t" $2}' File1.txt )"
for file in F*.txt
do
endresult=$( paste <( echo "$endresult" ) <( awk '{ if(length($3) != 0) { print $3 }else{print 0}}' $file ) )
done
#Replacing empty values for zeroes
endresult=$( echo "$endresult" | awk -v max_rows=$( echo "$endresult" | awk '{print NF}' | sort -r | head -1 ) 'BEGIN{ OFS="\t" }{ for(i=1;i < (max_rows + 1);i++) { if(length($i) == 0 ){ $i = 0 } } ; print $0}' )
问候!