尝试将整个文件夹的相同格式的文件合并到合并的文件。
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。使用联接,但只能执行两个文件。
您可以使用
此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
用于表格输出。
您能否尝试遵循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
这将
为你工作:
#!/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}' )
编辑:我从第一个文件中抓取前两列,因为您说这两列在所有文件中都是相等的。
问候!