2013-12-19 2 views
0

Мои данные в следующей редакции:Как напечатать несколько строк как поле?

P04637 1A1U 1AIE 1C26 1DT7 1GZH 1H26 1HS5 1JSP 1KZY 1MA3 1OLG 1OLH 1PES 1PET 1SAE 1SAF 1SAK 1SAL 1TSR 1TUP 1UOL 1XQH 1YC5 1YCQ 

Но я хочу следующим образом:

P04637 1A1U 
P04637 1C26 
P04637 1AIE 
P04637 1DT7 
P04637 1XQH 
P04637 1MA3 
P04637 1PES 
P04637 1SAE 
+0

Perl или Awk .. какой? –

+0

Что вы пробовали? Какие у вас проблемы? StackOverflow не является сервисом «написать мой код для меня». –

+1

@DaveCross - я не могу понять голоса за это ... Не предприняли никаких усилий и изначально непонятно, не вопрос – fugu

ответ

0

Как PERL скрипт:

use warnings; 
use strict; 

open my $input, '<', 'in.txt' or die "$!"; 

while (<$input>){ 
    my @split = split; 
    my $spacer = shift @split; 
    print "$spacer $_\n" foreach @split; 
} 

Печать:

P04637 1A1U 
P04637 1AIE 
P04637 1C26 
P04637 1DT7 
P04637 1GZH ... 
+0

Он не просил табуляторов. – ceving

+2

@ceving - он ничего не просил. – fugu

4

Эта печать го e первое поле, а затем каждое последующее поле до конца строки.

$ awk '{for (i=2;i<=NF;i++) print $1,$i}' file         
P04637 1A1U 
P04637 1AIE 
P04637 1C26 
P04637 1DT7 
P04637 1GZH 
P04637 1H26 
P04637 1HS5 
P04637 1JSP 
P04637 1KZY 
P04637 1MA3 
P04637 1OLG 
P04637 1OLH 
P04637 1PES 
P04637 1PET 
P04637 1SAE 
P04637 1SAF 
P04637 1SAK 
P04637 1SAL 
P04637 1TSR 
P04637 1TUP 
P04637 1UOL 
P04637 1XQH 
P04637 1YC5 
P04637 1YCQ 

Чтобы получить именно то, что запрос ОП, не больше, не меньше:

awk '{print $1,$2 RS $1,$4 RS $1,$3 RS $1,$5 RS $1,$23 RS $1,$11 RS $1,$14 RS $1,$16}' file 
P04637 1A1U 
P04637 1C26 
P04637 1AIE 
P04637 1DT7 
P04637 1XQH 
P04637 1MA3 
P04637 1PES 
P04637 1SAE 
+0

классическое решение .. +1 – Kent

+0

Привет, все, просто осознайте, что исходный вопрос задает вопрос о случайном экспорте, см. Мое решение. :-) – BMW

+0

Как вы можете сказать, что форма OPs-текста. Возможно, он написал это неправильно. Вся строка не указана в запросе на вывод, поэтому ему может понадобиться только часть. Тогда все решения здесь были бы неправильными. – Jotne

0

Просто понимаю первоначальный вопрос просят экспортировать случайно

awk 'BEGIN{srand($RANDOM)} 
{ split($0,a,FS); 
    for (i=2;i<=NF;i++) 
    { while (1) 
     { s=int(rand()*(NF-1)+2) 
      if (a[s]!="") {print $1,a[s];delete a[s];break} 
     } 
    } 
}' file 

результат

P04637 1C26 
P04637 1H26 
P04637 1DT7 
P04637 1HS5 
P04637 1AIE 
P04637 1GZH 
P04637 1A1U 
+1

Для случайного порядка 'awk '{for (i = 2; i <= NF; i ++) print $ 1, $ i}' file | sort -R' –

+0

Почему вы используете номер '14'? И '$ RANDOM' будет равно пустой строке' '' 'Я думаю .. –

+0

Вы правы, я обновил NF-1. Я сделал тест на 14 позициях до – BMW

2

Другой подход с AWK:

awk 'NR==1 {a=$1; next} {print a,$1}' RS=" " file 

Устанавливая RS=" " мы определяем разделитель строки как пространство. Таким образом, мы будем получать каждый раз другую запись.

NR==1 означает при чтении первой записи. Там мы сохраняем первое значение. С этого момента мы продолжаем записывать сохраненное значение + текущее.

возвращает:

P04637 1A1U 
P04637 1AIE 
P04637 1C26 
P04637 1DT7 
P04637 1GZH 
P04637 1H26 
P04637 1HS5 
P04637 1JSP 
P04637 1KZY 
P04637 1MA3 
P04637 1OLG 
P04637 1OLH 
P04637 1PES 
P04637 1PET 
P04637 1SAE 
P04637 1SAF 
P04637 1SAK 
P04637 1SAL 
P04637 1TSR 
P04637 1TUP 
P04637 1UOL 
P04637 1XQH 
P04637 1YC5 
P04637 1YCQ 
+0

приятный +1. Я написал один с настройкой 'OFS', но оставил пустую строку. это лучше. – Kent

+0

Привет, все, просто осознайте, что исходный вопрос требует случайного экспорта, см. Мое решение. :-) – BMW

+2

Ну @BMW Я бы не сказал случайным образом. Я думаю, что выборка - это просто образец, чтобы иметь идею. Некоторые разъяснения автора могут помочь. – fedorqui

2
perl -lane '$v=shift @F; print "$v $_" for @F' file 
1

Ни Perl, ни Awk требуется для этой работы. Bash достаточно:

{ IFS=' ' read -r -a A ; for I in ${A[@]:1} ; do echo ${A[0]} $I ; done ; } <<<'P04637 1A1U 1AIE 1C26 1DT7 1GZH 1H26 1HS5 1JSP 1KZY 1MA3 1OLG 1OLH 1PES 1PET 1SAE 1SAF 1SAK 1SAL 1TSR 1TUP 1UOL 1XQH 1YC5 1YCQ' 
P04637 1A1U 
P04637 1AIE 
P04637 1C26 
... 

Все, что вам нужно, это уже здесь:

Смежные вопросы