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í
-i
příznak ssed
prové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$f
je 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 ...