Bash 如何使用cut命令从文件中提取包含分隔符的字段
在Unix中,假设一个文件包含5个字段和数据,例如:Bash 如何使用cut命令从文件中提取包含分隔符的字段,bash,shell,unix,sh,cut,Bash,Shell,Unix,Sh,Cut,在Unix中,假设一个文件包含5个字段和数据,例如: "112233"|"Roshan"|"25"|" FAX 022 3987789 \| TEL 77766288892 \| abc "|"Male" 需要提取第四个字段。下面使用 column_value=`echo $line | cut -f4 -d'|' 这只给了我们-“传真0223987789\ 但需要“传真022 3987789\|电话77766288892\|abc”作为第四列值 有效分隔符应为- “|” 您可以添加两个额外
"112233"|"Roshan"|"25"|" FAX 022 3987789 \| TEL 77766288892 \| abc "|"Male"
需要提取第四个字段。下面使用
column_value=`echo $line | cut -f4 -d'|'
这只给了我们-“传真0223987789\
但需要“传真022 3987789\|电话77766288892\|abc”
作为第四列值
有效分隔符应为-
“|”
您可以添加两个额外字段,如下所示
echo $line | cut -f 4,5,6 -d\|
或者,您可以使用sed将“|”分隔符替换为不同的字符(例如制表符)
当涉及解析输入字符串/文件所需的多字符反限制器时,
cut
不是合适的工具
您可以使用它来定义记录中每个字段的外观。您可以将FPAT
作为正则表达式常量写入,在这种情况下,下面的内容应该可以工作
FPAT = "(\"[^\"]+\")"
在Awk
命令中使用此命令
line='"112233"|"Roshan"|"25"|" FAX 022 3987789 \| TEL 77766288892 \| abc "|"Male"'
awk '
BEGIN {
FPAT = "(\"[^\"]+\")"
}{print $4}' <<<"$line"
cut
不是正确的工具。您需要一个CSV解析器,更准确地说,将值读入变量$line
可能是错误的方法(如果确实这样做,请在任何地方使用read-r
和引号“$line”
)。另请参阅
line='"112233"|"Roshan"|"25"|" FAX 022 3987789 \| TEL 77766288892 \| abc "|"Male"'
awk '
BEGIN {
FPAT = "(\"[^\"]+\")"
}{print $4}' <<<"$line"
" FAX 022 3987789 \| TEL 77766288892 \| abc "