我在CSV文件中有以下行
1,LINUX,"/usr/cti/conf/apps/parameters param1 param2","root passowrd"
删除分隔符","由sed
我现在想从行
中读取每个字段# echo 1 LINUX "/usr/cti/conf/apps/parameters param1 param2" "root passowrd" | awk '{print $1}'
1
# echo 1 LINUX "/usr/cti/conf/apps/parameters param1 param2" "root passowrd" | awk '{print $2}'
LINUX
# echo 1 LINUX "/usr/cti/conf/apps/parameters param1 param2" "root passowrd" | awk '{print $3}'
/usr/cti/conf/apps/parameters
第三个字段的预期结果应为" / usr / cti / conf / apps / parameters param1 param2"
请告知如何阅读该字段以获取引号之间的所有字词
需要在我的awk命令中添加什么内容?
所以如果是单个单词,那么awk应该只打印这个单词 如果awk看到引号之间的单词,那么awk应该在引号之间打印所有单词
答案 0 :(得分:1)
不要用sed删除逗号:你正在失去" c"在CSV(逗号分隔值)中,事情变得更复杂。如果是这样,您可以使用cut
:
cut -d',' -f3
示例:
$ cut -d',' -f3 <<< '1,LINUX,"/usr/cti/conf/apps/parameters param1 param2","root passowrd"'
"/usr/cti/conf/apps/parameters param1 param2"
$ cut -d',' -f3 <<< '1,LINUX,/usr/cti/conf/apps/parameters param1 param2,"root passowrd"'
/usr/cti/conf/apps/parameters param1 param2
当字段以逗号分隔时,它适用于任何情况。因此,您不必担心双引号包装字段的情况。
答案 1 :(得分:0)
在下面的awk命令中,字段分隔符设置为"
,以便我们可以通过打印列号2轻松获取字符串/usr/cti/conf/apps/parameters param1 param2
。要包含双引号,只需添加{{1触发打印命令时变量。
FS
如果您不希望在最终结果中打印$ echo '1 LINUX "/usr/cti/conf/apps/parameters param1 param2" "root passowrd"' | awk -F'"' '{print FS$2FS}'
"/usr/cti/conf/apps/parameters param1 param2"
,请尝试以下操作
"
如果您的输入符合此$ echo '1 LINUX "/usr/cti/conf/apps/parameters param1 param2" "root passowrd"' | awk -F'"' '{print $2}'
/usr/cti/conf/apps/parameters param1 param2
,那么您可以使用1,LINUX,"/usr/cti/conf/apps/parameters param1 param2","root passowrd"
作为字段分隔符来获取字符串,
"/usr/cti/conf/apps/parameters param1 param2"