我有一个文件:
id name date 1 paul 23.07 2 john 43.54 3 marie 23.4 4 alan 32.54 5 patrick 32.1
我想打印以“p”开头并且编号为奇数的名称
我的命令:
grep "^p" filename | cut -d ' ' -f 2 | ....
结果:
paul patrick
答案 0 :(得分:1)
Awk可以做到这一切:
$ awk 'NR > 1 && $2 ~ /^p/ && ($1 % 2) == 1 { print $2 }' op.txt
paul
patrick
修改强>
要使用:
作为字段分隔符:
$ awk -F: 'NR > 1 && $2 ~ /^p/ && ($1 % 2) == 1 { print $2 }' op.txt
NR> 1 强>
略过标题
$ 2〜/ ^ p /
名称字段以p
$ 1%2 == 1
ID字段为奇数
如果以上所有都是真的:
{print $ 2}
打印名称字段
答案 1 :(得分:0)
一个小笨蛋怎么样?
awk '{if ($1 % 2 == 1 && substr($2, 1, 1) == "p") print $2}' filename
在awk中,默认情况下字段被spaces, tabs and newlines拆分,因此您的ID可用作$ 1,名称为$ 2等等。如果条件为真,则if显示为不言自明,名称将打印出来,否则什么都没做。 AWK及其语法比人们通常认为的要友好得多。
记住基本模式:
BEGIN {
# ran once in the beginning
}
{
# done for each line
}
END {
# ran once in the end
}
如果您需要更复杂的解析,您可以在单独的文件中保持脚本的清晰和可读性,并将其称为:
awk -f script.awk filename
答案 2 :(得分:0)
你可以试试这个
grep -e "[0-9]*[13579]\s\+p[a-z]\+" -o text | tr -s ' ' | cut -d ' ' -f 2
奇数可以通过正则表达式轻松表示,我们在这里写
[0-9]*[13579]
如果您尝试使用示例文件名text
文件:文字
id name date
1 paul 23.07
2 john 43.54
3 marie 23.4
5 patrick 32.1
38 peter 21.44
10019 peyton 12.02
你会得到输出:
paul
patrick
peyton
请注意,tr -s ' '
用于确保分隔符始终为1个空格。