多次使用 cut 并使用多个定界符连接结果?
Using cut multiple times and concatenating the results using multiple delimiters?
如果我有一个文件:
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
我想 awk 或许可以实现这一点,但我无法想出...
要让 awk 像您指定的那样打印每一行,请使用
awk '{ print ";" ":" "-" }' filename
或者,要排除 header 行,
awk 'NR > 1 { print ";" ":" "-" }' filename
要将结果放入 bash 数组:
while IFS='\n' read line; do array+=("$line"); done < <(awk '{ print ";" ":" "-" }' filename)
如果你总是有 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/\([^ ]*\) \([^ ]*\) \([^ ]*\) \(.*\)/\;\:\-/g '
与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
跳过header
perl -lanE 'printf "%s;%s:%s-%s\n",@F[0,1,3,4] if $.>1'
Shell 脚本:
while read x ; do set - $x ; echo ";:-" ; done < filename
1;2:4-5
7;8:10-11
13;14:16-17
如果我有一个文件:
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
我想 awk 或许可以实现这一点,但我无法想出...
要让 awk 像您指定的那样打印每一行,请使用
awk '{ print ";" ":" "-" }' filename
或者,要排除 header 行,
awk 'NR > 1 { print ";" ":" "-" }' filename
要将结果放入 bash 数组:
while IFS='\n' read line; do array+=("$line"); done < <(awk '{ print ";" ":" "-" }' filename)
如果你总是有 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/\([^ ]*\) \([^ ]*\) \([^ ]*\) \(.*\)/\;\:\-/g '
与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
跳过header
perl -lanE 'printf "%s;%s:%s-%s\n",@F[0,1,3,4] if $.>1'
Shell 脚本:
while read x ; do set - $x ; echo ";:-" ; done < filename
1;2:4-5
7;8:10-11
13;14:16-17