如果我有档案:
c1 c2 c3 c4 c5 c6
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18 我只希望第一、第二、第四和第五列排成一行,但用不同的分隔符分隔。
例如,第1行是: 1;2:4-5第2行是: 7;8:10-11第3行是: 13;14:16-17
我认为,使用相同的分隔符,命令应该如下所示:
paste --delimiter=':' <(cut -f1 file.txt) <(cut-f2 file.txt) <(cut -f4 file.txt) <(cut -f5 file.txt)结果应该在数组中,这样每一行都是数组中的一个单独的条目。
IFS='\n'; echo "${array[*]}"
1;2:4-5
7;8:10-11
13;14:16-17我想沃克也许能做到,但我想不出.
发布于 2015-03-17 21:56:48
若要使awk按您指定的方式打印每一行,请使用
awk '{ print $1 ";" $2 ":" $4 "-" $5 }' filename或者,为了排除标题行,
awk 'NR > 1 { print $1 ";" $2 ":" $4 "-" $5 }' filename若要将结果输入bash数组,请执行以下操作:
while IFS='\n' read line; do array+=("$line"); done < <(awk '{ print $1 ";" $2 ":" $4 "-" $5 }' filename)发布于 2015-03-17 21:59:49
我想如果您有4个字段,就可以使用sed。
line="1 2 3 4 5 6
> 7 8 9 10 11 12
> 13 14 15 16 17 18 "
echo "$line" | cut -f1,2,4,5 -d " " | sed 's/\([^ ]*\) \([^ ]*\) \([^ ]*\) \(.*\)/\1\;\2\:\3\-\4/g '发布于 2015-03-17 22:56:33
用perl
perl -lanE 'printf "%s;%s:%s-%s\n",@F[0,1,3,4]' file版画
c1;c2:c4-c5
1;2:4-5
7;8:10-11
13;14:16-17跳头
perl -lanE 'printf "%s;%s:%s-%s\n",@F[0,1,3,4] if $.>1'https://stackoverflow.com/questions/29110304
复制相似问题