Smyčku s jednou vložkou můžete použít takto:
for f in file1 file2 file3; do sed -i "s/$/\t$f/" $f; done
Pro každý soubor v seznamu se použije sed pro připojení na konec každého řádku tabulátor a název souboru.
Vysvětlení:
- Pomocí
-ipříznak ssedprovést výměnu na místě a přepsat soubor - Proveďte náhradu pomocí
s/PATTERN/REPLACEMENT/. V tomto příkladu je PATTERN$, konec řádku a REPLACEMENT je\t(=TAB) a$fje název souboru z proměnné smyčky.s///příkaz je v dvojitých uvozovkách, takže shell může rozšiřovat proměnné.
No tak, proč doporučujete tyto výkonné nástroje, když je tu paste příkaz!
$ cat a
A
B
C
D
$ cat b
1
2
3
4
$ paste a b
A 1
B 2
C 3
D 4
S trochou triku můžete použít paste pro účely OP. Nenahradí však vložené soubory:
for f in file1 file2 file3; do
paste $f <(yes $f | head -n $(cat $f | wc -l)) > $f.new
done
Toto vloží příslušný název souboru jako poslední sloupec každého souboru do nového souboru filename.new
Můžete použít awk :
awk '{print $0, FILENAME}' file1 file2 file3 ...