GNU/Linux >> Linux Esercitazione >  >> Linux

Aggiunta di una colonna di valori in un file delimitato da tabulazioni

Puoi usare un loop di una riga come questo:

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

Per ogni file nell'elenco, verrà utilizzato sed per aggiungere alla fine di ogni riga una tabulazione e il nome del file.

Spiegazione:

  • Utilizzando il -i flag con sed per eseguire una sostituzione sul posto, sovrascrivendo il file
  • Esegui una sostituzione con s/PATTERN/REPLACEMENT/ . In questo esempio PATTERN è $ , la fine della riga e REPLACEMENT è \t (=una TAB), e $f è il nome del file, dalla variabile del ciclo. Il s/// command è racchiuso tra virgolette in modo che la shell possa espandere le variabili.

Andiamo perché voi ragazzi consigliate questi potenti strumenti quando c'è paste comando!

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

Con un piccolo trucco, potresti usare paste ai fini del PO. Tuttavia, non sostituirà i file inplace:

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

Questo incollerà il rispettivo nome file come ultima colonna di ogni file nel nuovo file filename.new


Puoi usare awk :

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

Linux
  1. Visualizza l'output dei comandi o il contenuto del file in formato colonna

  2. Lum:sostituire i valori comuni in due file in base alla prima colonna?

  3. Ordinamento di un file delimitato da tabulazioni

  4. Aggiunta di una sezione al file ELF

  5. File di ordinamento della shell Linux in base alla seconda colonna?

emette la seconda colonna di un file

Aggiunta di timestamp a un nome file con mv in BASH

Aggiungi un'intestazione a un file delimitato da tabulazioni

Prendi l'ennesima colonna in un file di testo

Aggiunta di file ai file tbz

completamento del file bash senza specificare ./