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 dengansed
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 ...