перамяшчаючы кожную другую радок у новы слупок з AWK

Вось яшчэ нуб пытанне. У мяне ёсць файл, як гэта

John
30
Mike
0.0786268
Tyson
0.114889
Gabriel
0.176072
Fiona
0.101895

Мне трэба перанесці кожную другую радок у новы слупок таму ён павінен выглядаць наступным чынам

John   30
Mike   0.0786268
Tyson  0.114889
Gabriel 0.176072
Fiona   0.101895

Я толькі цяпер, што AWK «NR% 2 == 0» будзе друкаваць кожную другую радок, можа хто-небудзь прапанаваць мне, як перанесці іх у новую калонку, як апісана вышэй. Любая дапамога найбольш цэніцца.

5
Звязаныя, але не AWK канкрэтна: stackoverflow.com/questions/8522851/…
дададзена аўтар Michael J. Barber, крыніца

7 адказы

awk '{printf "%s%s",$0,(NR%2?FS:RS)}' file

тлумачэнне:

  • printf will not include a new line character at the end of line (unlike print)
  • (NR%2?FS:RS) decides new line (RS) or field seperator (FS) based on NR%2

If your colmns should be seperated by \t

awk '{printf "%s%s",$0,NR%2?"\t":RS}'
7
дададзена
Гэта рашэнне залежыць ад дэфолтаў FS і RS, якія, адпаведна, прастору і сімвал новага радка.
дададзена аўтар Tom, крыніца
+1 Гэта геніяльна.
дададзена аўтар jaypal singh, крыніца
Гэта самы выдатны і элегантны ілюстрацыя AWK. Ні адно іншае рашэнне не набліжаецца.
дададзена аўтар Greg A. Woods, крыніца
Гэта дапамагло мне. Дзякуй @ эд-Morton
дададзена аўтар Hsehdar, крыніца

xargs можа зрабіць гэта, камандны радок вельмі кароткі:

xargs -n2 < file
3
дададзена

Адзін са спосабаў:

awk '{ printf("%-10s ",$0); if(NR%2==0) printf("\n");}' file

<�моцны> Паглядзі

1
дададзена
Printf з'яўляецца убудаваным, а не функцыяй, так што() не рабіць тое, што вы думаеце, што яны робяць, заднюю коскі з'яўляецца superflous, і спосаб друку новага радка друк «» .
дададзена аўтар Ed Morton, крыніца
<�Код> Printf друкуе без перакладу радкі і % s з'яўляецца спецыфікацыяй фармату для радка. <�Код>% - 10s будзе панэль з прабеламі да даўжыні 10, выраўнаваныя па левым краі, або пакараціць больш доўгую радок. Я б на самой справе Е ( "% s", $ 0) замест гэтага, з прабелам пасля% с, у якасці альтэрнатывы, сімвал табуляцыі, \ т .
дададзена аўтар tripleee, крыніца
Дзякуй за адзін лайнер, гэта сапраўды працуе выдатна. Я толькі пачаў вывучаць AWK і калі я мог бы папрасіць вас трохі больш, я думаю, Е ( "% - 10s», $ 0) будзе друкаваць кожную рэч у лініі, але я не мог зразумець, пасля гэтага. Дзякуй зноў.
дададзена аўтар Amit, крыніца

Я быў бы спакуса выкарыстоўваць СЕПГ , як гэта:

sed 'N;s/\n/ /' file

Тым не менш, гэта не прыгожа фарматаваць дадзеныя. Вы маглі б канвеер у слупок -t :

< file sed 'N;s/\n/ /' | column -t

Але гэта здаецца непатрэбным. Было б лепш выкарыстоўваць ўстаўкі , як гэта:

paste - - < file

вынікі:

John    30
Mike    0.0786268
Tyson   0.114889
Gabriel 0.176072
Fiona   0.101895
1
дададзена
Дзякуй, не ведаў, што гэта можа быць зроблена з пастай
дададзена аўтар Amit, крыніца

СЭД лепш зрабіць гэта, чым AWK:

sed 'N;s/\n/ /g' yourfile

Таксама ў AWK:

awk '{if(NR%2!=0){p=""}else{p="\n"};printf $0" "p}' your_file

also check another solution here

0
дададзена
СЭД ці не лепш зрабіць гэта, чым AWK, як гэта нават не блізка да таго, як вы маглі б зрабіць гэта ў AWK.
дададзена аўтар Ed Morton, крыніца
дзякуй працуе як шарм
дададзена аўтар Amit, крыніца
paste - - < file > newfile

паста выкарыстоўвае ўкладку ў якасці падзельніка па змаўчанні.

0
дададзена
awk 'NR%2{s=$0; next} {print s, $0}' file

or using default action

awk 'NR%2{s=$0; next} {$0=s" "$0}1' file
0
дададзена