Bagaimana saya bisa menambahkan Kolom nilai dalam file yang memiliki jumlah baris tertentu. Saya memiliki file input seperti ini:
File input:
SPATA17 1 217947738
LYPLAL1 1 219383905
FAM47E 4 77192838
SHROOM3 4 77660162
SHROOM3 4 77660731
SHROOM3 4 77662248
Berkas keluaran:
SPATA17 1 217947738 file1
LYPLAL1 1 219383905 file1
FAM47E 4 77192838 file1
SHROOM3 4 77660162 file1
SHROOM3 4 77660731 file1
SHROOM3 4 77662248 file1
Dalam hal ini, saya ingin menambahkan Kolom nilai, hingga jumlah baris dalam file. Nilai tetap konsisten, seperti "file1".
Alasannya adalah saya memiliki 100 file-file itu. Saya tidak ingin membuka setiap file dan menempelkan sebuah kolom. Juga apakah ada cara untuk mengotomatisasi ini, dengan masuk ke direktori dan menambahkan kolom nilai. Nilai berasal dari nama file, yang harus ditambahkan di setiap baris file di kolom terakhir / pertama.
sumber
sed
paling praktis untuk penggantian pola dan penghematan di tempat. Untuk keperluan Anda menyimpan file, itu adalah opsi yang relatif nyaman. Jika Anda tidak perlu menulis kembali ke file yang sama dengan yang Anda proses, makaawk
biasanya lebih mudah untuk dikerjakan.awk
pemisah bidang input / output, jadi cobalah untuk menghindari menggunakannya kapan pun memungkinkan, menjadikansed
lebih menarik.Ayo mengapa kalian merekomendasikan alat-alat yang ampuh ketika ada
paste
perintah!Dengan sedikit tipu daya, Anda bisa menggunakan
paste
untuk tujuan OP. Namun, itu tidak akan menggantikan file di tempat:Ini akan menempelkan nama file masing-masing sebagai kolom terakhir dari setiap file ke file baru
filename.new
sumber
paste
jelas merupakan permata tersembunyi.Anda bisa menggunakan
awk
:sumber
FILENAME
adalah variabel dalamawk
, itu diperluas ke nama file saat ini yangawk
sedang diproses. Anda cukup melakukannya satu, beri makan semua fileawk
.GNU awk 4.1.0
atau lambat, Anda bisa menggunakannya-i
untuk mengedit inplace. Jika tidak, Anda harus mengarahkan ulangawk
ouput ke file temp, kemudian gunakangrep
untuk mengekstrak baris dari setiap file.for file in *; do awk 'BEGIN{OFS="\t"}{print $0, FILENAME}' $file; done