GNU/Linux >> Belajar Linux >  >> Linux

Menambahkan Kolom nilai dalam file yang dibatasi tab

Anda dapat menggunakan loop satu baris seperti ini:

for f in file1 file2 file3; do sed -i "s/$/\t$f/" $f; done

Untuk setiap file dalam daftar, ini akan menggunakan sed untuk menambahkan tab dan nama file ke akhir setiap baris.

Penjelasan:

  • Menggunakan -i bendera dengan sed untuk melakukan penggantian di tempat, menimpa file
  • Lakukan penggantian dengan s/PATTERN/REPLACEMENT/ . Dalam contoh ini POLA adalah $ , akhir baris, dan REPLACEMENT adalah \t (=sebuah TAB), dan $f adalah nama file, dari variabel loop. s/// perintah berada dalam tanda kutip ganda sehingga shell dapat memperluas variabel.

Ayo mengapa kalian merekomendasikan alat canggih itu ketika ada paste perintah!

$ cat a
A
B
C
D
$ cat b
1
2
3
4
$ paste a b
A   1
B   2
C   3
D   4

Dengan sedikit tipu daya, Anda bisa menggunakan paste untuk tujuan OP. Namun, itu tidak akan menggantikan file di tempat:

for f in file1 file2 file3; do 
    paste $f <(yes $f | head -n $(cat $f | wc -l)) > $f.new
done

Ini akan menempelkan masing-masing nama file sebagai kolom terakhir dari setiap file ke dalam file baru filename.new


Anda dapat menggunakan awk :

awk '{print $0, FILENAME}' file1 file2 file3 ...

Linux
  1. Ganti Variabel Lingkungan Dalam File Dengan Nilai Sebenarnya?

  2. Lum – Ganti Nilai Umum Dalam Dua File Menurut Kolom Pertama?

  3. Menyortir file yang dibatasi tab

  1. Menambahkan bagian ke file ELF

  2. Linux mengurutkan file shell menurut kolom kedua?

  3. Menambahkan stempel waktu ke nama file dengan mv di BASH

  1. Tambahkan header ke file yang dibatasi tab

  2. Ambil kolom ke-n dalam file teks

  3. Ambil nilai dari file plist di Linux