2012-07-07 8 views
14

Gdy używam Terminal znaleźć każdą pracę, która została opracowana na ostatnich dwudziestu czterech godzin dostaję plik tekstowy z linii tak:Jak mogę umieścić zakładki w plikach tekstowych z Terminala?

ABC 12345 Praca Pracował DATE

DEF 67890 inną pracę DATE

GHI 10112 Finał Praca DATE

plik ten tekst może być do sto linie. Muszę wstawić wszystkie te dane do tabeli w programie Microsoft Excel. Aby ułatwić sobie życie, chciałbym dowiedzieć się, jak dodać kartę w każdym wierszu, po numerach.

coś takiego:

echo "ABC 12345 <tab> Job Worked on DATE" >> jobs.txt 
echo "DEF 67890 <tab> Another Job on DATE" >> jobs.txt 
echo "GHI 10112 <tab> Final Job on DATE" >> jobs.txt 

Jak to osiągnąć?

+0

Prawdopodobnie nie chcesz przestrzeni otaczających znaki e tab. –

+0

Nie musi to być znak tabulacji, w MS Excel możesz wybrać znak separatora do importu, możesz wybrać coś, co jest widoczne jak "," lub ";" i po prostu edytuj plik z tymi znakami. – pizza

Odpowiedz

32

Użyj echo -e z \ t dla karty. Tak:

echo -e "ABC 12345 \t Job Worked on DATE" >> jobs.txt 
+1

Do czego służy flaga -e? Kiedy słyszę echo, daje mi to tylko flagę -n. – W3Geek

+2

@ W3Geek: To zależy od wersji 'echo', której używasz. Wbudowane polecenie 'echo' firmy bash rozpoznaje' -e', co umożliwia interpretację znaków ze zmienionym ukośnikiem odwrotnym, w tym '\ t' dla tabulatora. Ale nie wszystkie wersje 'echo' robią to. Polecenie 'printf' jest lepszą alternatywą - ale biorąc pod uwagę, że masz już informacje w postaci tekstu, jeszcze lepiej przekształcić je za pomocą' sed', 'awk' lub czegoś podobnego. –

+0

OK, widzę, jak działa flaga -e. =) Nie pojawił się jednak w moim "echo człowieka". Nie rozumiem, co robią komendy sed lub awk. – W3Geek

5

Można nacisnąć Ctrl-VTab wpisać surowego Tab.


Można również użyć $'...' c-ciąg składni:

echo $'ABC 12345 \t Job Worked on DATE' >> jobs.txt 
+1

Tak, ale ponieważ OP ma wszystkie dane jako tekst, i po prostu trzeba go przekształcić, ponowne wpisywanie nie byłoby to * najlepsze podejście. –

+0

Masz rację @ KeithThompson. To nie byłoby najlepsze podejście do tego, co robię. Wybrałem ten post, ponieważ jego podejście było najprostsze. – W3Geek

1

dołączyć kartę do drugiego pola:

awk '{$2 = $2 "\t"; print}' inputfile > outputfile 

podobne, ale za pomocą wyrażenia regularnego:

sed 's/[[:digit:]]\+/&\t/' inputfile > outputfile 
+0

Co robią komendy "awk" i "sed"? – W3Geek

+0

@ W3Geek: Oba są filtrami transformacji tekstu. 'awk' w szczególności jest pełnowymiarowym językiem programowania (i' sed' prawdopodobnie również). Nie da się ich w pełni wytłumaczyć w komentarzu. Wypróbuj 'man sed' i/lub' man awk', jeśli twój system ma komendę 'man' lub wyszukaj Google lub Wikipedia. –

+0

To polecenie 'sed' nie działa, przynajmniej nie dla mnie (GNU sed 4.2.1). 'sed' nie rozpoznaje rozszerzonych wyrażeń regularnych (w szczególności kwalifikatora' + ') domyślnie.A jeśli tak, twoje polecenie 's ///' może * zastąpić * sekwencję cyfr przez znak tabulatora; chcesz * dodać * znak tabulacji. –