Text-Processing
並排比較兩個以上包含數值的文件
我有三個文件,其中包含一個排序的數字序列,每行一個:
文件 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-