Text-Processing

並排比較兩個以上包含數值的文件

  • July 11, 2016

我有三個文件,其中包含一個排序的數字序列,每行一個:

文件 1

1
2
3

文件2

1
3
4

文件 3

1
5

我想並排“對齊”這三個文件,如下所示:

file1  file2  file3
1      1      1
2      
3      3
      4
             5

我試過了,sdiff但它只適用於 2 個文件

您可以處理每個文件並列印帶有某個字元的行,例如X對於序列 1- max中的每個缺失數字(其中max是該文件中的最後一個數字),paste然後結果用空格替換該字元:

paste \
<(awk 'BEGIN{n=1};{while (n<$1) {print "X";n++}};{n=$1+1};1' file1) \
<(awk 'BEGIN{n=1};{while (n<$1) {print "X";n++}};{n=$1+1};1' file2) \
<(awk 'BEGIN{n=1};{while (n<$1) {print "X";n++}};{n=$1+1};1' file3) \
| tr X ' '

如果所有文件中缺少某個值,您將在輸出中得到空行(實際上它們不是空的,它們只包含空格)。

要刪除它們,請替換tr X ' 'sed '/[[:digit:]]/!d;s/X/ /g' 此外,如果您需要標頭,您始終可以先執行以下內容:

printf '\t%s' file1 file2 file3 | cut -c2-

引用自:https://unix.stackexchange.com/questions/295144