我在sample.txt
中有以下两行Column1 | Column2
AIA 1000
AIA Integrations for E-Business Suite 5544
现在我想看到以下输出:
awk -F "-" sample.txt
我试过了:
t = 'p', 'q', 'r', 's', 't'
它过滤连字符" - "靠近"电子商务套房" 如何使它过滤最后一个连字符而不是中间连字符。
答案 0 :(得分:4)
您可以使用:
awk -F ' - ' -v OFS=';' 'BEGIN{print "Column1", "Column2"} {print $1, $2}' file |
column -s ';' -t
Column1 Column2
AIA 1000
AIA Integrations for E-Business Suite 5544
-F ' - '
使用" - "
是输入字段分隔符-v OFS=';'
使用;
作为输出字段分隔符column -s ';' -t
使用;
作为分隔符答案 1 :(得分:0)
我会使用perl来保证我们真正捕获最后一个-
作为分隔符而不是第一个字段中间的其他实例:
perl -wnle '/^(.+) - (.+)$/ or die; print "$1\t$2"' sample.txt
如果您希望输出位于固定宽度列中,则可以使用column
:
perl -wnle '/^(.+) - (.+)$/ or die; print "$1\t$2"' sample.txt | column -s $'\t' -t
说明:正则表达式中的第一个(.+)
将捕获第一个组。因为+
是贪婪的,^(.+) -
它与最大可能的子字符串匹配,所以如果有-
的多个实例,它将包括所有这些实例,但是第一次捕获中的最后一个组。然后,最后一个(.+)
将捕获第二个捕获组中的所有剩余字符。
答案 2 :(得分:0)
另一个例子,使用split和join:
perl -F- -e 'print join "\t", reverse pop @F, join "-", @F' sample.txt