В среде * nix, как бы я сгруппировал столбцы вместе? - PullRequest
2 голосов
/ 11 октября 2011

У меня есть следующий текстовый файл:

A,B,C
A,B,C
A,B,C

Есть ли способ, используя стандартные * nix инструменты (cut, grep, awk, sed и т. Д.), Обработать такой текстовый файл и получить следующий вывод:

A
A
A
B
B
B
C
C
C

Ответы [ 3 ]

5 голосов
/ 11 октября 2011

Вы можете сделать:

tr , \\n

, и это сгенерирует

A
B
C
A
B
C
A
B
C

, который вы можете отсортировать.

Если вы не хотите тянуть первый столбец, затем второйзатем третье, в этом случае вы хотите что-то вроде:

awk -F, '{for(i=1;i<=NF;++i) print i, $i}' | sort -sk1 | awk '{print $2}'

Чтобы объяснить это, первая часть генерирует

1 A
2 B
3 C
1 A
2 B
3 C
1 A
2 B
3 C    

вторая часть будет стабильно сортировать (так что внутренний порядок сохраняется)

1 A
1 A
1 A
2 B
2 B
2 B
3 C
3 C
3 C    

и третья часть будет раздвигать цифры

3 голосов
/ 11 октября 2011

Вы можете использовать цикл for-loop в сочетании с cut, если вы знаете заранее число столбцов. Вот пример использования синтаксиса bash:

for i in {1..3}; do
    cut -d, -f $i file.txt
done
0 голосов
/ 11 октября 2011

Попробуйте:

awk 'BEGIN {FS=","} /([A-C],)+([A-C])?/ {for (i=1;i<=NF;i++) print $i}' YOURFILE | sort
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...