我的文本文件遵循以下格式:
name loc - u q1:a|b|c|d|e|f|g|h q2:i|j|k|l|m|n|o|p
对于每一行,我想在第7次出现" |"之后提取文本。对于每个" q"在那条线上。换句话说,我想打印这样的东西:
q1 q2
name h p
有没有办法可以在没有循环的情况下使用awk或grep执行此操作?
提前致谢!
答案 0 :(得分:0)
您可以尝试以下解决方案 -
输入
vipin@kali:~$ cat kk.txt
q1:a|b|c|d|e|f|g|h q2:i|j|k|l|m|n|o|p
输出
vipin@kali:~$ awk 'BEGIN{FS=":|\|| "} {print $2,$12,$23} END {print $1,$20,$31}' OFS="\t" kk.txt
q1 q2
name h p
解释
我们需要使用多个字段分隔符:
,[Space]
,|
来划分列和打印所需的输出。
答案 1 :(得分:0)
我认为字段之间的空格是制表符。由于你使用q1和q2作为标题,我猜它们出现在每一行上
首先,你需要切出第二,第三和第四场。 cut
在这里很容易。
对于每个剩余的字段,您需要相同的sed
- 操作。像
echo "name loc - u q1:a|b|c|d|e|f|g|h q2:i|j|k|l|m|n|o|p" | cut -f1,5- |
sed 's/[^\t]*:\([^|]*|\)\{7\}/ /g'