English 中文(简体)
如何垂直地将数据打入手稿?
原标题:How to parse data vertically in shell script?
  • 时间:2012-04-18 22:52:23
  •  标签:
  • bash
  • shell

我的专栏数据如下:

A B C D E
1 2 3 4 5

我愿照此办理B:2 C:3 D:4 E:5。

怎样才能做到这一点? 我是否应标出两条线,然后用阵列加以打印?

我怎么做。

最佳回答

Awk是好的。

awk  NR==1{for(i=0;i<NF;i++){row[i]=$i}} NR==2{for(i=0;i<NF;i++){printf "%s:%s",row[i],$i}}  oldfile > newfile

略为可读写本:

#!/usr/bin/awk -f

NR == 1 {
    for(i = 0; i < NF; i++) {
        first_row[i] = $i
    }
}
NR == 2 {
    for(i = 0; i < NF; i++) {
        printf "%s:%s", first_row[i], $i
    }
    print ""
}

如果你希望纵向扩大,那么你必须说明如何。

问题回答

具有任何内容的两个线:

(read LINE;
 LINE_ONE=($LINE);
 read LINE;
 LINE_TWO=($LINE);
 for i in `seq 0 $((${#LINE_ONE[@]} - 1))`;
 do
     echo ${LINE_ONE[$i]}:${LINE_TWO[$i]};
 done)

做的是,一线搭桥就把它放在一片路上。

这或许有助于你:

echo -e "A B C D E FFF GGG
1 2 3 4 5 666 7" |
sed  s/ |$/:/g;N;:a;s/([^:]*:)([^
]*)
([^: ]+ *)/213
/;ta;s/
// 
A:1 B:2 C:3 D:4 E:5 FFF:666 GGG:7

Perl 1-liner:

perl -lane  if($.%2){@k=@F}else{print join" ",map{"$k[$_]:$F[$_]"}0..$#F} 

更符合逻辑的版本:

#!/usr/bin/perl 
my @keys;
while (<>) {
  chomp;
  if ($. % 2) {  # odd lines are keys
     @keys = split    , $_;
  } else { # even lines are values
     my @values = split    , $_;
     print join    , map { "$keys[$_]:$values[$_]" } 0..$#values;
  }
}




相关问题
Parse players currently in lobby

I m attempting to write a bash script to parse out the following log file and give me a list of CURRENT players in the room (so ignoring players that left, but including players that may have rejoined)...

encoding of file shell script

How can I check the file encoding in a shell script? I need to know if a file is encoded in utf-8 or iso-8859-1. Thanks

Bash usage of vi or emacs

From a programming standpoint, when you set the bash shell to use vi or emacs via set -o vi or set -o emacs What is actually going on here? I ve been reading a book where it claims the bash shell ...

Dynamically building a command in bash

I am construcing a command in bash dynamically. This works fine: COMMAND="java myclass" ${COMMAND} Now I want to dynamically construct a command that redirectes the output: LOG=">> myfile.log ...

Perform OR on two hash outputs of sha1sum

I want perform sha1sum file1 and sha1sum file2 and perform bitwise OR operation with them using bash. Output should be printable i.e 53a23bc2e24d039 ... (160 bit) How can I do this? I know echo $(( ...

Set screen-title from shellscript

Is it possible to set the Screen Title using a shell script? I thought about something like sending the key commands ctrl+A shift-A Name enter I searched for about an hour on how to emulate ...

热门标签