Переупорядочение столбцов с помощью Perl с одним вкладышем - PullRequest
2 голосов
/ 25 ноября 2011

Как вы реорганизуете это с одним вкладышем

foo  r1.1   abc
foo  r10.1  pqr
qux  r2.1   lmn
bar  r33.1  xpq

# In fact there could be more fields that preceeds column with "rxx.x".

В это

r1.1  foo  abc
r10.1 foo  pqr
r2.1  qux  lmn
r33.1 bar  xpq

По сути, поместите второй столбец в первый и все остальное, что следует за ним, после.

Ответы [ 6 ]

4 голосов
/ 25 ноября 2011

Предполагая, что ваш текст находится в файле "test", он сделает это:

perl  -lane 'print "$F[1] $F[0] $F[2]"' test
3 голосов
/ 25 ноября 2011
$ perl -pale '$_ = "@F[1,0,2..$#F]"' file

Если он разделен табуляцией, потребуется немного больше:

$ perl -pale 'BEGIN { $"="\t"; } $_ = "@F[1,0,2..$#F]"' file
3 голосов
/ 25 ноября 2011

Если у вас более трех столбцов, вам нужно что-то вроде:

perl -lane 'print join q( ),$F[1],$F[0],@F[2..@F-1]'
2 голосов
/ 25 ноября 2011

Основные ответы предоставлены другими, я рассмотрел случай данных фиксированной ширины с возможными пустыми полями:

>cat spacedata.txt
foo  r1.1   abc
foo  r10.1  pqr
qux  r2.1   lmn
bar  r33.1  xpq
     r1.2   cake
is   r1.2   alie

>perl -lpwE '$_=pack "A7A5A*", (unpack "A5A7A*")[1,0,2];' spacedata.txt
r1.1   foo  abc
r10.1  foo  pqr
r2.1   qux  lmn
r33.1  bar  xpq
r1.2        cake
r1.2   is   alie
2 голосов
/ 25 ноября 2011

Содержание 'infile':

foo  r1.1   abc
foo  r10.1  pqr
qux  r2.1   lmn
bar  r33.1  xpq

Perl в одну строку:

perl -pe 's/\A(\S+\s+)(\S+\s+)/$2$1/' infile

Результат:

r1.1   foo  abc
r10.1  foo  pqr
r2.1   qux  lmn
r33.1  bar  xpq
1 голос
/ 26 ноября 2011
file
a 5 ss
b 3 ff
c 2 zz

cat file | awk '{print $2, $1, $3}' # will print column 2,1,3

5 a ss
3 b ff
2 c zz

#or if you want to sort by column and print to new_file

cat file | sort -n -k2 | awk '{print $0}' > new_file

new_file
c 2 zz
b 3 ff
a 5 ss
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...