Awk在两个文件之间减去许多列

Awk在两个文件之间减去许多列,awk,Awk,如果我有两个文件,每个文件中有4列数据,我想在这些文件之间减去列,我会执行以下操作: paste data1.txt data2.txt | awk '{ printf("%s %d %d %d\n", $1, ($2-$6), ($3-$7), ($4-$8); }' > out.txt 如果我有一个文件,每个文件有100列,并且我想在两个文件之间分写列,而不写那么多($I-$j),($k-$l)等等,我应该如何做类似的事情呢 谢谢。使用循环。您需要传入列数 awk -v cols=1

如果我有两个文件,每个文件中有4列数据,我想在这些文件之间减去列,我会执行以下操作:

paste data1.txt data2.txt | awk '{ printf("%s %d %d %d\n", $1, ($2-$6), ($3-$7), ($4-$8); }' > out.txt
如果我有一个文件,每个文件有100列,并且我想在两个文件之间分写列,而不写那么多($I-$j),($k-$l)等等,我应该如何做类似的事情呢


谢谢。

使用循环。您需要传入列数

awk -v cols=100 '{ 
    printf "%s", $1
    for (i=2; i <= cols; i++)
        printf "%s%d", OFS, $i - $(cols+i)
    printf "\n"
}'
awk-v cols=100'{
printf“%s”,1美元

为了(i=2;i
awk
救援

假设您的file1比file2多了一列,并且您正在区分file1和file2对应的列

$ paste file1 file2 | 
  awk '{n=int(NF/2); printf "%s", $1; 
        for(i=2;i<=n+1;i++) printf "%d" ,OFS ($i-$(i+n)); printf "\n"}'
$paste file1 file2|
awk'{n=int(NF/2);printf“%s”,$1;

对于(i=2;i使用
getline
;大致基于我找到的答案:

文件2:

21 22 23 24
31 32 33 34
输出:

10 11 12 13
20 21 22 23

for(i=1;i@karakfa谢谢,我不知道!我相应地调整了我的答案。
31 33 35 37
51 53 55 57
21 22 23 24
31 32 33 34
10 11 12 13
20 21 22 23