Wygenerujemy plik csv o niższych wartościach
yp1234,577,1,3
yp5678,577,3,5
yp9012,132,8,9
Muszę wyodrębnić dane i utworzyć pliki na podstawie drugiej kolumny. Jeśli jest to 577, cała linia musi zostać wyodrębniona i umieszczona w osobnym pliku. Mam na myśli, że potrzebuję pliku z wierszami z drugą kolumną jako samą 577 i innym plikiem z drugą kolumną jako samą 132
Próbowałem użyć IF, ale nie działało
Odpowiedzi:
Użyj
awk
:Spowoduje to utworzenie dwóch plików
577.csv
, a132.csv
w bieżącym katalogu.Powyższe polecenie zakłada, że możesz mieć tylko
132
lub577
drugie pole. Utworzy jedną nazwę pliku dla każdej wartości znalezionej w drugim polu całościfile.csv
.Jeśli oprócz dwóch, które Cię interesują, są inne wartości i chcesz zignorować te linie, zrób to zamiast tego:
źródło
awk
implementacje, których nie można użyćprint > $2 ".cvs"
. Na tych, trzeba by pierwszy obliczyć nazwę pliku, a następnie wykonajprint
:fname = $2 ".cvs"; print > fname
.Podoba mi się
awk
rozwiązanie Terdona , ale ze względu na kompletność, tutaj jest tylko sugestiabash
Będzie produkować pliki
577.csv
oraz132.csv
w bieżącym katalogu.źródło
Aby wyodrębnić wszystkie 577 na standardowe wyjście
- edytuj 1 Poprawiony, w oparciu o komentarz @ terdon poniżej, aby uniknąć fałszywych dopasowań, gdy co najmniej 3 przecinki na linii z 577.
Myślę jednak, że jego
awk
rozwiązanie jest bardziej kompleksowe.źródło
foo577bar
lubyp9012,132,8,577
..*
można również dopasować przecinki, więc nie wiesz, które pole jest dopasowane. Może być drugi, może być również 45. Moja druga skarga była błędna, masz rację, że przecinki chronią przed dopasowaniemfoo577bar
.Używanie
csvkit
:Te
-c 2
markicvsgrep
rozważyć drugą kolumnę iz-m 577
pytamy go dopasować ciąg577
w tej kolumnie.Do
output.csv
:Aby dopasować liczbę ciągów i zapisać dane wyjściowe w pliku dla każdego ciągu:
Spowoduje to utworzenie dwóch plików
output-132.csv
ioutput-577.csv
.źródło