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
-ibendera denganseduntuk 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$fadalah 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 ...