替代多次迭代“剪切”

替代多次迭代“剪切”

我正在尝试从文件中过滤信息 - 它是按列组织的,但我还没有找到比以下更好的方法来获取我想要的信息:

less $file | cut -d':' -f6 | cut -d' ' -f3 | cut -d '#' -f1

除了发送“cut”之外,还有其他方法吗?任何帮助都将不胜感激!

答案1

通常,过滤字符串最好使用正则表达式。但是,对于您的特定示例,您可以将每个表达式转换cut为以下两个简单等价表达式之一awk 。以下任一项:

awk '{FS=":";$0=$0; FS=" ";$0=$6; FS="#";$0=$3; print $1}' $file

awk '{split($0,a,":"); split(a[6],b,/ +/); split(b[3],c,"#"); print c[1]}' $file

第一种技术将“cut -dx -fy”转换为“FS=x;将$0设置为输入;结果为$y”。FS是字段分隔符。

第二个将其转换为“split(input,output,x),结果是 output[y]”。我不确定 cut 如何处理空格作为分隔符,所以我使用了一个将/ +/多个空格匹配为一个的正则表达式。使用" "if 来拆分单个空格。

相关内容