/ / Wklej wiersz nagłówka w wielu plikach tsv (oddzielonych tabulatorami) - linux, bash, unix

Wklej wiersz nagłówka w wielu plikach tsv (oddzielonych tabulatorami) - linux, bash, unix

Mam wiele plików .tsv o nazwie jako choochoo1.tsv, choochoo2.tsv, ... choochoo(nth).tsv pliki. Ja też mam main.tsv plik. Chcę wyodrębnić wiersz nagłówka main.tsv i wklej wszystko choochoo(nth).tsv pliki. Pamiętaj, że są inne .tsv pliki w katalogu, których nie chcę zmieniać lub wklejać nagłówek, więc nie mogę tego zrobić *.tsv i wybierz wszystkie .tsv pliki (więc musisz wybrać choochoo ciąg dla poszukiwanych plików). To właśnie próbowałem użyć skryptu bash, ale nie mogłem go uruchomić. Proszę zaproponować odpowiedni sposób.

for x in *choochoo; do
head -n1 main.tsv > $x
done

Odpowiedzi:

1 dla odpowiedzi № 1

Masz problem z plikiem glob, a także z przekierowaniem:

  • plik glob złapie takie rzeczy AAchoochoo ale nie choochoo1.tsv a nawet nie AAchoochoo.tsv
  • przekierowanie zastąpi istniejące pliki zamiast dodawać je. Polecenie przekierowania do dodania do pliku to >>, ale to doda tekst na końcu i chcesz dodać tekst na początku.

Problem z dodawaniem tekstu do istniejącegojest to, że musisz otworzyć plik zarówno do odczytu, jak i zapisu, a następnie przesyłać strumieniowo zarówno dodany tekst, jak i oryginalny tekst, w kolejności - i zwykle tam, gdzie ludzie zawodzą, ponieważ powłoka nie może „otwierać plików w ten sposób (jest trochę bardziej złożony sposób robienia tego bezpośrednio, otwierając plik zarówno do czytania, jak i pisania, ale nie zamierzam dalej tego zajmować.

Możesz użyć pliku tymczasowego, coś takiego:

for x in choochoo[0-9]*.tsv; do
mv "$x"{,.orig}
(head -n1 main.tsv; cat "$x.orig") > $x
rm "$x.orig"
done