Saya memiliki tiga file yang berisi urutan angka, satu per baris:
file1
1
2
3
file2
1
3
4
file3
1
5
Saya ingin "menyelaraskan" ketiga file ini berdampingan seperti berikut:
file1 file2 file3
1 1 1
2
3 3
4
5
Saya sudah mencoba sdiff
tetapi hanya berfungsi dengan 2 file
text-processing
awk
diff
cheseaux
sumber
sumber
diff3
?diff3
tidak memiliki format output itu.diff3
dan sebagai @Kusalananda dinyatakan dengan benar, itu tidak menghasilkan output. Juga, saya mencari solusi generik (untuk file n, n> 2)5
pada baris kelima hasilnya malah ketiga?Jawaban:
Anda dapat memproses setiap file dan mencetak garis dengan beberapa karakter misalnya
X
untuk setiap nomor yang hilang dalam urutan 1- max (di mana max adalah angka terakhir dalam file itu),paste
hasilnya kemudian mengganti karakter itu dengan spasi:Jika nilai tertentu hilang dari semua file Anda akan mendapatkan baris kosong di output Anda (sebenarnya mereka tidak kosong, mereka hanya berisi kosong).
Untuk menghapusnya ganti
tr X ' '
dengansed '/[[:digit:]]/!d;s/X/ /g'
Juga, jika Anda membutuhkan header Anda selalu dapat menjalankan sesuatu seperti ini terlebih dahulu:sumber
;1
bagian di bagian akhir. Saya menggunakan{print $0}
sebaliknya, IMHO sedikit lebih samar. Ngomong-ngomong, terima kasih lagiSolusi umum dengan awk: membutuhkan GNU awk
Mengambil pendekatan yang berbeda dan lebih sederhana untuk ini berdasarkan komentar Don:
sumber
Sebuah solusi dengan
bash
,join
,paste
, dan rasa tidak enak:Kecuali yang terakhir
sort -n
, semua ini berfungsi dengan item teks apa pun alih-alih angka, asalkan item tidak mengandung tab (tetapiTAB
dapat diubah ke pemisah lainnya). Juga, itu bisa dilakukan hanya dengan 3 file sementara dan beberapa pengocokan (tapi itu hanya akan menambah rasa tidak enak).sumber