在shell 脚本中,我可以在cut 中指定多个输出分隔符吗?
In shell script, can I specify more than one output delimiter in cut?
我有一个包含以下数据的文件
abcdefghijklmnopqrst
我需要使用命令 cut
的输出如下
bcd|klm.no|pq.rst
我需要使用 cut 在我的输出中包含分隔符 |
和 .
。
我使用这段代码得到了带有一个定界符的输出
cat file.txt |cut -c2-4,11-13,14-15,16-17,18-20 --output-delimiter='|'
作为
bcd|klm|no|pq|rst
我可以通过更改命令中的某些内容来获得 2 个输出分隔符吗?
cut
一次支持单个分隔符,但您可以使用简单的 sed
或 Awk 脚本轻松替换它。
awk '{ print substr([=10=], 2, 4) "|" substr([=10=], 11, 13) "."
substr([=10=], 14, 15) "|" substr([=10=], 16, 17) "."
substr([=10=],18, 20) }' file.txt
巧合的是cat
is useless.
使用 GNU sed:
$ sed -r 's/.(.{3}).{6}(.{3})(.{2})(.{2})/|.|./' file.txt
bcd|klm.no|pq.rst
两个 cut
(由 Gilez 对 OP 的评论建议):
cut -c2-4,11-15,16-20 --output-delimiter='|' file.txt | \
cut -c1-7,8-13,14-15 --output-delimiter='.'
输出:
bcd|klm.no|pqr.st
给定这样的常规输入,tr
也可以 "answer" 没有管道:
tr -s 'a-t' 'b-d|k-m.no|p-r.st' < file.txt
注:tr
不能插入,听起来不可能。一般是是不可能的,但是作弊就是把答案包含在SET2里,把答案挤出来休息。
我有一个包含以下数据的文件
abcdefghijklmnopqrst
我需要使用命令 cut
的输出如下
bcd|klm.no|pq.rst
我需要使用 cut 在我的输出中包含分隔符 |
和 .
。
我使用这段代码得到了带有一个定界符的输出
cat file.txt |cut -c2-4,11-13,14-15,16-17,18-20 --output-delimiter='|'
作为
bcd|klm|no|pq|rst
我可以通过更改命令中的某些内容来获得 2 个输出分隔符吗?
cut
一次支持单个分隔符,但您可以使用简单的 sed
或 Awk 脚本轻松替换它。
awk '{ print substr([=10=], 2, 4) "|" substr([=10=], 11, 13) "."
substr([=10=], 14, 15) "|" substr([=10=], 16, 17) "."
substr([=10=],18, 20) }' file.txt
巧合的是cat
is useless.
使用 GNU sed:
$ sed -r 's/.(.{3}).{6}(.{3})(.{2})(.{2})/|.|./' file.txt
bcd|klm.no|pq.rst
两个 cut
(由 Gilez 对 OP 的评论建议):
cut -c2-4,11-15,16-20 --output-delimiter='|' file.txt | \
cut -c1-7,8-13,14-15 --output-delimiter='.'
输出:
bcd|klm.no|pqr.st
给定这样的常规输入,tr
也可以 "answer" 没有管道:
tr -s 'a-t' 'b-d|k-m.no|p-r.st' < file.txt
注:tr
不能插入,听起来不可能。一般是是不可能的,但是作弊就是把答案包含在SET2里,把答案挤出来休息。